Go è un ottimo linguaggio per la creazione di server web semplici ma efficienti e servizi web. Fornisce un pacchetto HTTP integrato che contiene utilità per la creazione rapida di un server Web o di file.
L’obiettivo di questo tutorial è quello di creare un server web in grado di accettare una richiesta GET e servire una risposta. Useremo il server per servire i file statici, agendo come un file server. Faremo quindi in modo che il server Web risponda a una richiesta POST proveniente da un invio di un modulo, ad esempio un modulo di contatto.,
Senza ulteriori indugi, esploriamo come costruire il tuo primo server web con Go.
Setup
Avrai bisogno di Andare versione 1.11 o superiore per seguire questo tutorial.
In questa sezione, creeremo tutti i file necessari e stabiliremo la corretta struttura dei file. Successivamente, importeremo i nostri pacchetti per verificare se l’installazione funziona. Non ti preoccupare – la configurazione è molto semplice per il server web Golang.
Crea i seguenti file e cartelle in base alla struttura sottostante., Il fileserver.go
si trova alla radice del progetto, così come la cartellastatic
, che contiene due file HTML:index.html
eform.html
.
- server.go- static/- - index.html- - form.html
Ora scriviamo un po ‘ di codice. Aprire il fileserver.go
e importare i pacchetti richiesti. Useremo fmt
per stampare dati utili sul terminale elog
per stampare errori fatali in caso di crash del server web.
Il net/http
è il pacchetto più importante., Fornisce tutte le funzionalità per la creazione di un’implementazione client o server HTTP come un server Web Golang.
package mainimport ( "fmt" "log" "net/http")
Infine, aggiungiamo una semplice funzione main()
nel file server.go
che stampa un messaggio sul terminale.
func main() { fmt.Printf("Starting server at port 8080\n")}
Per testare la configurazione, avviare il server fittizio con il seguente comando.
go run server.go
Se hai seguito insieme alla configurazione, dovresti vedere il seguente output nel tuo terminale.,
Starting server at port 8080
Se tutto sembra a posto, il passo successivo è quello di creare un server web.
Avvio di un server web con percorsi GET
In questa fase, creeremo un server web che è effettivamente servito sulla porta 8080 e in grado di rispondere alle richieste GET in arrivo.
Modifichiamo il codice nella nostra funzionemain()
per avviare un server web sulla porta 8080. Il metodoListenAndServe
viene esportato dal pacchettohttp
che abbiamo importato durante il primo passaggio. Questo metodo ci consente di avviare il server web e specificare la porta da ascoltare per le richieste in arrivo.,
Si noti che il parametro della porta deve essere passato come una stringa anteposta dalla punteggiatura dei due punti. Il secondo parametro accetta un gestore per configurare il server per HTTP / 2. Tuttavia, questo non è importante per questo tutorial, quindi possiamo tranquillamente passare nil
come secondo argomento.
func main() { fmt.Printf("Starting server at port 8080\n") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) }}
A questo punto, il server può avviarsi, ma non sa ancora come gestire le richieste. Dobbiamo passare i gestori al server in modo che sappia come rispondere alle richieste in arrivo e quali richieste accettare.,
Useremo la funzioneHandleFunc
per aggiungere gestori di route al server web. Il primo argomento accetta il percorso che deve ascoltare /hello
. Qui, si dice al server di ascoltare eventuali richieste in arrivo per . Il secondo argomento accetta una funzione che contiene la logica di business per rispondere correttamente alla richiesta.
Per impostazione predefinita, questa funzione accetta unResponseWriter
per inviare una risposta indietro e unRequest
oggetto che fornisce ulteriori informazioni sulla richiesta stessa., Ad esempio, è possibile accedere alle informazioni sulle intestazioni inviate, che possono essere utili per l’autenticazione della richiesta.
Come puoi vedere, il gestore invia un messaggio "Hello!”
mentre passiamo questa risposta al ResponseWriter
.
Ora proviamo questa configurazione. Avviare il server web congo run server.go
e visitare. Se il server risponde con
"Hello!"
, è possibile continuare con il passaggio successivo, in cui verrà illustrato come aggiungere la sicurezza di base ai percorsi del server Web Golang.,
Aggiungi sicurezza di base alle rotte
Va da sé che la sicurezza è importante. Esploriamo alcune strategie di base per migliorare la sicurezza del tuo server web Go.
Prima di farlo, dovremmo prendere un momento per aumentare la leggibilità del nostro codice. Creiamo la funzionehelloHandler
, che contiene tutta la logica relativa alla richiesta/hello
.
Questo gestore utilizza l’oggetto Request
per verificare se il percorso richiesto è corretto. Questo è un esempio molto semplice di come è possibile utilizzare l’oggetto Request
.,
Se il percorso non è corretto, il server restituisce all’utente un errore StatusNotFound
. Per scrivere un errore all’utente, è possibile utilizzare il metodo http.Error
. Si noti che il codiceStatusNotFound
corrisponde a un errore 404. Tutti i codici di stato possono essere trovati nella documentazione Golang.
Successivamente, aggiungiamo un controllo per verificare il tipo di richiesta. Se il metodo non corrisponde a GET
, il server restituisce un nuovo errore. Quando entrambi i controlli passano, il server restituisce la risposta di successo "Hello!"
.,
L’ultima cosa che dobbiamo fare è modificare la funzionehandleFunc
nella nostra funzionemain()
per accettare la funzionehelloHandler
.
http.HandleFunc("/hello", helloHandler)
Di seguito è riportato il codice completo per il file server.go
.
Successivamente, avvieremo il server Web Go con go run server.go
. Puoi testare la tua sicurezza inviando una richiesta POST a usando uno strumento come Postman o cURL.
Avvia un server web statico
In questo passaggio, creeremo un semplice file server per ospitare file statici., Questa sarà un’aggiunta molto semplice al server web.
Per essere sicuri di avere contenuti da pubblicare sul server web, modifichiamo il file index.html
che si trova nella cartella static
. Per semplificare le cose, basta aggiungere un’intestazione al file che dice “Static Website
.”Se lo desideri, puoi aggiungere più file o file di stile per rendere il tuo server web un po’ più bello.
<html> <head> <title>Static Website</title> </head> <body> <h2>Static Website</h2> </body></html>
Per servire la cartellastatic
, dovrai aggiungere due righe di codice aserver.go
., La prima riga di codice crea l’oggetto file server utilizzando la funzioneFileServer
. Questa funzione accetta un percorso nel tipohttp.Dir
. Pertanto, dobbiamo convertire il percorso della stringa "./static”
in unhttp.Dir
tipo di percorso.
Non dimenticare di specificare la rotta Handle
, che accetta un percorso e il fileserver. Questa funzione agisce allo stesso modo della funzione HandleFunc
, con alcune piccole differenze. Per ulteriori informazioni sull’oggettoFileServer
, controllare la documentazione.,
È ora di provare il codice. Accendi il server congo run server.go
e visita. Dovresti vedere l’intestazione””.
Accetta una richiesta di invio di un modulo
Infine, il server Web deve rispondere a un invio di un modulo.
Aggiungiamo alcuni contenuti al fileform.html
nella cartellastatic
. Si noti che l’azione del modulo viene inviata a /form
. Ciò significa che la richiesta POST dal modulo verrà inviata a ., Il modulo stesso richiede l’input per due variabili:
name
eaddress
.
Il passo successivo è creare il gestore per accettare la richiesta /form
. Il fileform.html
è già servito tramite il FileServer e si può accedere tramite
First, the function has to call ParseForm()
per analizzare la query raw e aggiornarer.PostForm
er.Form
. Questo ci permetterà di accedere ai valori name
e address
tramite il metodo r.FormValue
.,
Alla fine della funzione, scriviamo entrambi i valori nel ResponseWriter
usando fmt.Fprintf
.
Non dimenticare di aggiungere il nuovo percorso del gestore di moduli alla funzione main()
.
http.HandleFunc("/form", formHandler)
Ora, il codice completo è simile a questo.
Provare il gestore di moduli
Possiamo testare il modulo avviando il server congo run server.go
. All’avvio del server, visitare . Dovresti vedere due campi di input e un pulsante di invio.,
Quando hai compilato il modulo, premi il pulsante submit
. Il server dovrebbe elaborare la tua richiesta di POST e mostrarti il risultato sulla pagina di risposta come la seguente risposta.
Se vedi il risultato sopra, hai creato con successo il tuo primo Golang web e file server. Felicitazioni!
Se si desidera esplorare ulteriormente i server Web Golang, la documentazione del pacchetto HTTP Golang è piena di ottimi esempi., Questo tutorial sulla scrittura di applicazioni web in Go è un’altra grande risorsa che copre la maggior parte delle basi.
LogRocket: visibilità completa nelle tue app web
LogRocket è una soluzione di monitoraggio delle applicazioni frontend che ti consente di riprodurre i problemi come se fossero accaduti nel tuo browser. Invece di indovinare perché si verificano errori o chiedere agli utenti screenshot e discariche di log, LogRocket ti consente di ripetere la sessione per capire rapidamente cosa è andato storto., Funziona perfettamente con qualsiasi app, indipendentemente dal framework, e ha plugin per registrare il contesto aggiuntivo da Redux, Vuex e @ ngrx/store.
Oltre a registrare le azioni Redux e lo stato, LogRocket registra i registri della console, gli errori JavaScript, gli stacktraces, le richieste / risposte di rete con intestazioni + corpi, metadati del browser e registri personalizzati. Inoltre, il DOM consente di registrare HTML e CSS sulla pagina, ricreando video pixel-perfect anche delle app a pagina singola più complesse.
Provalo gratuitamente.