#howtodev - Creare un backend di base in Go

Scritto da il
Redatto da

Introduzione

Essendo Go stato concepito per sviluppare microservizi, include un network stack abbastanza completo direttamente nella standard library.

Lo scopo di questa breve guida è introdurre il lettore al modulo net/http così che possa poi condurre i propri studi in autonomia.

Guida passo passo

Andiamo a capire come mettere in piedi questo backend passo dopo passo.

Moduli in uso

Sarà necessario importare net/http e fmt (quest’ultimo non sarà necessario ma faciliterà le cose). Possiamo farlo con

import (
    "net/http"
    "fmt"
)

Creare degli handler

Ora è il momento di creare delle funzioni dette handler il cui scopo è elaborare le richieste sui vari percorsi (Es: /, /percorso)

Ogni funzione handler richiede due parametri, un http.ResponseWriter e un *http.Request.

A questo punto, ci basta definire la funzione con

func mioHandler(res http.ResponseWriter, req *http.Request) {   
}

essendo res un http.ResponseWriter, esso soddisfa l’interfaccia io.Writer, permettendoci di scrivervi dati da inviare come risposta al client.

Possiamo farlo in vari modi, ma per comodità useremo fmt.Fprint.

fmt.Fprint è analoga a fmt.Print ma scrive lo standard output su un io.Writer.

Funzione Analoga
fmt.Fprint fmt.Print
fmt.Fprintln fmt.Println
fmt.Fprintf fmt.Printf

Quindi aggiorniamo la funzione mioHandler di conseguenza:

func mioHandler(res http.ResponseWriter, req *http.Request) {
    fmt.Fprint(res, "<h1>Ciao Mondo<h1>")   
}

Colleghiamo l’handler a un percorso

A questo punto nella funzione main ci basta utilizzare http.HandleFunc per collegare l’handler appena creato al percorso che desideriamo:

func main() {
    http.HandleFunc("/", mioHandler)
}

In questo caso abbiamo collegato la funzione mioHandler al percorso /.

Mettiamo il server in ascolto

Ora ci basta indicare al server su quale porta ascoltare. In questo caso userò la 8080:

func main() {
    http.HandlerFunc("/", mioHandler)

    http.ListenAndServe(":8080", nil)
}

Ora il server sarà in ascolto, contattando 127.0.0.1 (l’indirizzo locale) ci verrà restituito il codice HTML che abbiamo messo nella funzione fmt.Fprint.

Riproviamoci

Questa volta mettendo insieme tutto quello che abbiamo creato, ne creeremo un altro con due handler:

package main

import (
    "net/http"
    "fmt"
)


func mioHandler(res http.ResponseWriter, req *http.Request) {
    fmt.Fprint(res, "<h1>Ciao Mondo!<h1>")
}

func altroHandler(res http.ResponseWriter, req *http.Request) {
    fmt.Fprint(res, `
<h1>Titolo</h1>
<p>Altra pagina</p>
`)
}

func main() {
    http.HandleFunc("/", mioHandler)

    http.HandleFunc("/altrapagina", altroHandler)

    http.ListenAndServe(":8080", nil)
}

Conclusione

Non era poi così complicato, ma se hai avuto problemi non esitare a contattarci sul nostro gruppo Telegram.

history_edu Revisioni