Go è un interessante linguaggio di programmazione per la creazione di moderne applicazioni web e software di sistema. Ha creato un enorme entusiasmo dopo il suo rilascio e alimenta servizi come Docker, Kubernetes, Terraform, Dropbox e Netflix .
Inoltre, la solida raccolta di pacchetti integrati di Go lo rende un'ottima scelta per la programmazione web. Questo articolo ti mostrerà come scrivere un server web di base in Go.
Importa i pacchetti necessari
Il pacchetto net/HTTP fornisce tutto il necessario per creare un server web e un client. Questo pacchetto presenta alcune funzioni utili per gestire la programmazione web.
Puoi importarlo aggiungendo la riga seguente all'inizio del codice sorgente:
import "net/http"
L'articolo utilizzerà anche il pacchetto fmt per formattare le stringhe e il pacchetto log per gestire gli errori. Puoi importarli singolarmente come mostrato sopra oppure importare tutti i pacchetti utilizzando un'unica istruzione di importazione:
import (
"fmt"
"log"
"net/http"
)
Puoi procedere con la scrittura della funzione main dopo aver importato i pacchetti necessari. Vai avanti e salva il file sorgente con l' estensione .go . Se stai usando Vim , usa il comando seguente per salvare e uscire da Vim:
:wq server.go
Scrivi la funzione principale
I programmi Go risiedono direttamente all'interno della funzione main, giustamente chiamata "main". Dovrai effettuare una chiamata al server qui. Aggiungi le seguenti righe al codice sorgente e guarda cosa fanno:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
L'esempio definisce la funzione main utilizzando la parola chiave func . Go ha regole rigide sulla posizione della parentesi graffa di apertura, quindi assicurati che la graffa iniziale sia sulla linea corretta. La prima istruzione in main definisce che tutte le richieste web al percorso root ( "/" ) saranno gestite da index, una funzione di tipo http.HandlerFunc .
La seconda riga avvia il server web tramite la funzione http.ListenAndServe . Segnala al server di ascoltare continuamente le richieste HTTP in entrata sulla porta 8080 del server. Il secondo parametro di questa funzione serve per bloccare il programma fino alla fine.
Poiché http.ListenAndServe restituisce sempre un errore, l'esempio racchiude questa chiamata all'interno di una chiamata log.Fatal . Questa istruzione registra eventuali messaggi di errore generati sul lato server.
Implementare funzioni di elaborazione
Come puoi vedere, la funzione main chiama l'indice della funzione del gestore per gestire le richieste del client. Tuttavia, l'esempio non ha ancora definito questa funzionalità per il proprio server.
Aggiungiamo le istruzioni necessarie per rendere utilizzabile la funzione indice:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Questa funzione accetta due argomenti diversi di tipo http.ResponseWriter e http.Request . Il parametro http.ResponseWriter contiene la risposta del server alla richiesta in arrivo, sotto forma di oggetto http.Request .
La funzione Fprintf del pacchetto fmt viene utilizzata per visualizzare e manipolare stringhe di testo. L'articolo lo utilizza per visualizzare la risposta del server alle richieste web. Infine, l'elemento r.URL.Path[1:] viene utilizzato per recuperare i dati dopo il percorso root.
Aggiungi tutte le parti rimanenti
Il tuo server web Go sarà pronto una volta aggiunti tutti i componenti rimanenti. Il codice sarà simile al seguente:
import (
"fmt"
"log"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
La prima riga è necessaria per compilare il codice del server web Go come file eseguibile.
Compila questo codice del server web Go come file eseguibile