Go is een interessante programmeertaal voor het bouwen van moderne webapplicaties en systeemsoftware. Het creëerde een enorme buzz na de release en ondersteunt services als Docker, Kubernetes, Terraform, Dropbox en Netflix .
Bovendien maakt Go's robuuste verzameling ingebouwde pakketten het een uitstekende keuze voor webprogrammering. Dit artikel laat zien hoe u een eenvoudige webserver in Go schrijft .
Importeer de benodigde pakketten
Het net/HTTP-pakket biedt alles wat nodig is om een webserver en client te creëren. Dit pakket biedt enkele nuttige functies voor webprogrammering.
Je kunt het importeren door de onderstaande regel aan het begin van je broncode toe te voegen:
import "net/http"
Het artikel gebruikt ook het fmt- pakket om tekenreeksen op te maken en het log- pakket om fouten af te handelen. U kunt ze afzonderlijk importeren zoals hierboven weergegeven, of alle pakketten importeren met één enkele importinstructie:
import (
"fmt"
"log"
"net/http"
)
U kunt doorgaan met het schrijven van de hoofdfunctie nadat u de benodigde pakketten heeft geïmporteerd. Ga je gang en sla het bronbestand op met de .go- extensie . Als u Vim gebruikt , gebruikt u de onderstaande opdracht om Vim op te slaan en af te sluiten:
:wq server.go
Schrijf de hoofdfunctie
Go-programma's bevinden zich direct in de hoofdfunctie, toepasselijk genaamd "main". U moet hier een serveroproep doen . Voeg de volgende regels toe aan de broncode en kijk wat ze doen:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
In het voorbeeld wordt de hoofdfunctie gedefinieerd met behulp van het trefwoord func . Go heeft strikte regels over de positie van het openingsbeugel, dus zorg ervoor dat het startbeugel op de juiste lijn staat. De eerste instructie in main definieert dat alle webverzoeken naar het hoofdpad ( "/" ) worden afgehandeld door index, een functie van het type http.HandlerFunc .
De tweede regel start de webserver via de http.ListenAndServe -functie . Het geeft aan dat de server voortdurend moet luisteren naar binnenkomende HTTP-verzoeken op poort 8080 van de server. De tweede parameter van deze functie is nodig om het programma tot het einde te blokkeren.
Omdat http.ListenAndServe altijd een fout retourneert, verpakt het voorbeeld deze aanroep in een log.Fatal aanroep . Deze verklaring registreert eventuele foutmeldingen die aan de serverzijde worden gegenereerd.
Verwerkingsfuncties implementeren
Zoals u kunt zien, roept de hoofdfunctie de handlerfunctie-index aan om clientverzoeken af te handelen. Het voorbeeld heeft deze functionaliteit echter nog niet gedefinieerd voor de server.
Laten we de nodige instructies toevoegen om de indexfunctie bruikbaar te maken:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Deze functie heeft twee verschillende argumenten nodig van het type http.ResponseWriter en http.Request . De parameter http.ResponseWriter bevat het antwoord van de server op het binnenkomende verzoek, in de vorm van een http.Request- object .
De functie Fprintf uit het fmt- pakket wordt gebruikt om tekstreeksen weer te geven en te manipuleren. Het artikel gebruikt dit om de reactie van de server op webverzoeken weer te geven. Ten slotte wordt het element r.URL.Path[1:] gebruikt om gegevens op te halen na het hoofdpad.
Voeg alle resterende delen toe
Uw Go-webserver is klaar zodra u alle overige componenten heeft toegevoegd. De code ziet er als volgt uit:
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))
}
De eerste regel is nodig om deze Go-webservercode als uitvoerbaar bestand te compileren.

Compileer deze Go-webservercode als een uitvoerbaar bestand