Go er et interessant programmeringssprog til at bygge moderne webapplikationer såvel som systemsoftware. Det skabte et stort buzz efter dets udgivelse og driver tjenester som Docker, Kubernetes, Terraform, Dropbox og Netflix .
Ydermere gør Gos robuste samling af indbyggede pakker det til et godt valg til webprogrammering. Denne artikel viser dig, hvordan du skriver en grundlæggende webserver i Go.
Importer de nødvendige pakker
Net/HTTP-pakken giver alt det nødvendige for at oprette en webserver og klient. Denne pakke præsenterer nogle nyttige funktioner til at håndtere webprogrammering.
Du kan importere den ved at tilføje linjen nedenfor til begyndelsen af din kildekode:
import "net/http"
Artiklen vil også bruge fmt -pakken til at formatere strenge og log- pakken til at håndtere fejl. Du kan importere dem individuelt som vist ovenfor, eller importere alle pakkerne ved hjælp af en enkelt importerklæring:
import (
"fmt"
"log"
"net/http"
)
Du kan fortsætte med at skrive hovedfunktionen efter import af de nødvendige pakker. Gå videre og gem kildefilen med .go- udvidelsen . Hvis du bruger Vim , skal du bruge kommandoen nedenfor til at gemme og afslutte Vim:
:wq server.go
Skriv hovedfunktionen
Go-programmer ligger direkte i hovedfunktionen, passende kaldet "main". Du skal foretage et serveropkald her . Tilføj følgende linjer til kildekoden og se, hvad de gør:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Eksemplet definerer hovedfunktionen ved hjælp af nøgleordet func . Go har strenge regler om placeringen af åbningsbøjlen, så sørg for, at startbøjlen er på den rigtige linje. Den første sætning i main definerer, at alle webanmodninger til rodstien ( "/" ) vil blive håndteret af indeks, en funktion af typen http.HandlerFunc .
Den anden linje starter webserveren via http.ListenAndServe -funktionen . Det signalerer serveren til løbende at lytte efter indgående HTTP-anmodninger på serverens port 8080. Den anden parameter i denne funktion er nødvendig for at blokere programmet indtil slutningen.
Da http.ListenAndServe altid returnerer en fejl, omslutter eksemplet dette opkald i en log.Fatal call . Denne erklæring logger eventuelle fejlmeddelelser genereret på serversiden.
Implementere behandlingsfunktioner
Som du kan se, kalder hovedfunktionen handlerfunktionsindekset for at håndtere klientanmodninger. Eksemplet har dog endnu ikke defineret denne funktionalitet for sin server.
Lad os tilføje de nødvendige udsagn for at gøre indeksfunktionen brugbar:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Denne funktion tager to forskellige argumenter af typen http.ResponseWriter og http.Request . http.ResponseWriter- parameteren indeholder serverens svar på den indgående anmodning i form af et http.Request- objekt .
Funktionen Fprintf fra fmt- pakken bruges til at vise og manipulere tekststrenge. Artiklen bruger dette til at vise serverens svar på webanmodninger. Endelig bruges r.URL.Path[1:]- elementet til at hente data efter rodstien.
Tilføj alle de resterende dele
Din Go-webserver vil være klar, når du har tilføjet alle de resterende komponenter. Koden vil se sådan ud:
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))
}
Den første linje er nødvendig for at kompilere denne Go-webserverkode som en eksekverbar fil.

Kompiler denne Go-webserverkode som en eksekverbar fil