Go is een geweldige taal voor het maken van eenvoudige maar efficiënte webservers en webservices. Het biedt een ingebouwd HTTP-pakket dat hulpprogramma ‘ s bevat voor het snel maken van een web-of bestandsserver.
Het doel van deze tutorial is om een webserver te maken die een GET-verzoek kan accepteren en een antwoord kan geven. We zullen de server gebruiken om statische bestanden te dienen, als een bestandsserver. We laten de webserver dan reageren op een POSTVERZOEK dat afkomstig is van een formulier, zoals een contactformulier.,
zonder verder oponthoud, laten we eens kijken hoe je je eerste webserver met Go kunt bouwen.
Setup
u hebt Go versie 1.11 of hoger nodig om deze tutorial te volgen.
in deze sectie zullen we alle benodigde bestanden aanmaken en de juiste bestandsstructuur vaststellen. Daarna importeren we onze pakketten om te testen of de setup werkt. Maak je geen zorgen — de setup is zeer eenvoudig voor de Golang webserver.
maak de volgende bestanden en mappen aan volgens onderstaande structuur., Het bestand server.go
bevindt zich aan de root van uw project, net als de map static
, die twee HTML-bestanden bevat: index.html
en form.html
.
- server.go- static/- - index.html- - form.html
laten we nu wat code schrijven. Open het server.go
bestand en importeer de vereiste pakketten. We zullen fmt
gebruiken om nuttige gegevens naar de terminal af te drukken en log
om fatale fouten af te drukken in het geval de webserver crasht.
de net/http
is het belangrijkste pakket., Het biedt alle functionaliteit voor het maken van een HTTP-client of server implementatie, zoals een Golang webserver.
package mainimport ( "fmt" "log" "net/http")
ten slotte voegen we een eenvoudige main()
functie toe in het server.go
bestand dat een bericht naar de terminal afdrukt.
func main() { fmt.Printf("Starting server at port 8080\n")}
start de fictieve server met het volgende commando om de setup te testen.
go run server.go
Als u de setup gevolgd hebt, ziet u de volgende uitvoer in uw terminal.,
Starting server at port 8080
als alles er goed uitziet, is de volgende stap het aanmaken van een webserver.
een webserver starten met GET routes
in dit stadium maken we een webserver aan die daadwerkelijk wordt geserveerd op poort 8080 en kan reageren op inkomende GET-verzoeken.
laten we de code in onze main()
functie aanpassen om een webserver op poort 8080 te starten. DeListenAndServe
methode wordt geëxporteerd door dehttp
pakket dat we geïmporteerd hebben tijdens stap één. Deze methode stelt ons in staat om de webserver te starten en de poort op te geven om te luisteren naar inkomende verzoeken.,
merk op dat de poortparameter moet worden doorgegeven als een tekenreeks met dubbele puntpunctie. De tweede parameter accepteert een handler om de server voor HTTP/2 te configureren. Dit is echter niet belangrijk voor deze handleiding, dus we kunnen veilig nil
als het tweede argument doorgeven.
func main() { fmt.Printf("Starting server at port 8080\n") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) }}
Op dit moment kan de server starten, maar het weet nog steeds niet hoe verzoeken te behandelen. We moeten handlers doorgeven aan de server zodat deze weet hoe te reageren op inkomende verzoeken en welke verzoeken te accepteren.,
we gebruiken de functie HandleFunc
om routehandlers aan de webserver toe te voegen. Het eerste argument accepteert het pad dat het nodig heeft om te luisteren naar /hello
. Hier vertel je de server om te luisteren naar inkomende verzoeken voor . Het tweede argument accepteert een functie die de zakelijke logica bevat om correct te reageren op het verzoek.
standaard accepteert deze functie eenResponseWriter
om een antwoord terug te sturen en eenRequest
object dat meer informatie geeft over het verzoek zelf., U kunt bijvoorbeeld toegang krijgen tot informatie over de verzonden headers, wat handig kan zijn voor het verifiëren van de aanvraag.
zoals u kunt zien, stuurt de handler een "Hello!”
bericht terwijl we dit antwoord doorgeven aan de ResponseWriter
.
laten we nu deze setup uitproberen. Start de webserver met go run server.go
en bezoek . Als de server reageert met
"Hello!"
, kunt u doorgaan met de volgende stap, waar u leert hoe u basisbeveiliging toevoegt aan uw Golang webserver routes.,
basisbeveiliging toevoegen aan routes
Het spreekt vanzelf dat beveiliging belangrijk is. Laten we verkennen een aantal basisstrategieën om de veiligheid van uw Go webserver te verbeteren.
voordat we dat doen, moeten we even de tijd nemen om de leesbaarheid van onze code te vergroten. Laten we de helloHandler
functie aanmaken, die alle logica bevat die gerelateerd is aan het /hello
verzoek.
deze handler gebruikt hetRequest
object om te controleren of het gevraagde pad correct is. Dit is een zeer eenvoudig voorbeeld van hoe je het Request
object kunt gebruiken.,
als het pad onjuist is, geeft de server een StatusNotFound
fout terug aan de gebruiker. Om een fout naar de gebruiker te schrijven, kunt u de methode http.Error
gebruiken. Merk op dat de StatusNotFound
code overeenkomt met een 404-fout. Alle statuscodes zijn te vinden in de Golang documentatie.
vervolgens voegen we een controle toe voor het verifiëren van het type verzoek. Als de methode niet overeenkomt met GET
, geeft de server een nieuwe fout terug. Als beide controles slagen, geeft de server zijn succes respons "Hello!"
.,
Het Laatste wat we moeten doen is de handleFunc
functie wijzigen in onze main()
functie om de bovenstaande helloHandler
functie te accepteren.
http.HandleFunc("/hello", helloHandler)
hieronder staat de volledige code voor uw server.go
bestand.
vervolgens starten we de go-webserver met go run server.go
. U kunt uw beveiliging testen door een BERICHTAANVRAAG te sturen naar met behulp van een tool zoals Postman of cURL.
Start een statische webserver
In deze stap maken we een eenvoudige bestandsserver om statische bestanden te hosten., Dit wordt een zeer eenvoudige toevoeging aan de webserver.
om er zeker van te zijn dat we inhoud op de webserver hebben, laten we het index.html
bestand in de static
map wijzigen. Om het simpel te houden, voeg je gewoon een kop toe aan het bestand met “Static Website
.”Als u wilt, kunt u meer bestanden of styling bestanden toe te voegen om uw webserver er een beetje mooier.
<html> <head> <title>Static Website</title> </head> <body> <h2>Static Website</h2> </body></html>
om de static
map te dienen, moet u twee regels code toevoegen aan server.go
., De eerste regel code maakt het object van de bestandsserver aan met de functie FileServer
. Deze functie accepteert een pad in het http.Dir
type. Daarom moeten we het string pad "./static”
converteren naar een http.Dir
padtype.
vergeet niet de Handle
route op te geven, die een pad en de bestandsserver accepteert. Deze functie werkt op dezelfde manier als de HandleFunc
functie, met enkele kleine verschillen. Raadpleeg de documentatie voor meer informatie over het FileServer
object.,
Het is tijd om de code uit te proberen. Start de server op met go run server.go
en bezoek . U zou de “
Static Website
” header moeten zien.
accepteer een formulier inzending na aanvraag
ten slotte moet de webserver reageren op een formulier inzending.
laten we wat inhoud toevoegen aan het form.html
bestand in de static
map. Merk op dat het formulier wordt verzonden naar /form
. Dit betekent dat de POST aanvraag van het formulier zal worden verzonden naar ., Het formulier zelf vraagt om invoer voor twee variabelen:
name
en address
.
de volgende stap is het aanmaken van de handler om het /form
verzoek te accepteren. Hetform.html
bestand wordt al geserveerd via de bestandsserver en kan worden benaderd via
First, the function has to call ParseForm()
om de ruwe query te ontleden en bij te werkenr.PostForm
enr.Form
. Dit geeft ons toegang tot de name
en address
waarden via de r.FormValue
methode.,
aan het einde van de functie schrijven we beide waarden naar ResponseWriter
met fmt.Fprintf
.
vergeet niet de nieuwe form handler route toe te voegen aan de main()
functie.
http.HandleFunc("/form", formHandler)
nu ziet de volledige code er zo uit.
het uitproberen van de form handler
We kunnen het formulier testen door de server te starten met go run server.go
. Wanneer de server wordt gestart, bezoek dan . U zou twee invoervelden en een submit-knop moeten zien.,
wanneer u het formulier hebt ingevuld, klikt u op de knop submit
. De server moet uw BERICHTAANVRAAG verwerken en u het resultaat tonen op de antwoordpagina zoals het onderstaande antwoord.
Als u het bovenstaande resultaat ziet, hebt u met succes uw eerste Golang web-en bestandsserver aangemaakt. Gefeliciteerd!
Als u Golang webservers verder wilt verkennen, staat de Golang HTTP package documentatie vol met geweldige voorbeelden., Deze tutorial over het schrijven van web apps In Go is een andere geweldige bron die de meeste basisprincipes dekt.
LogRocket: Full visibility into your web apps
LogRocket is een frontend applicatie monitoring oplossing waarmee u problemen opnieuw kunt afspelen alsof ze zich in uw eigen browser hebben voorgedaan. In plaats van te raden waarom fouten gebeuren, of gebruikers te vragen om screenshots en log dumps, LogRocket kunt u de sessie opnieuw af te spelen om snel te begrijpen wat er mis ging., Het werkt perfect met elke app, ongeacht het kader, en heeft plugins om extra context van Redux loggen, Vuex, en @ngrx/store.
naast het loggen van Redux acties en status, logrocket registreert console logs, JavaScript fouten, stacktraces, netwerk verzoeken/reacties met headers + lichamen, browser metadata, en aangepaste logs. Het instrumenteert ook de DOM om de HTML en CSS op te nemen op de pagina, opnieuw pixel-perfecte video ‘ s van zelfs de meest complexe single-page apps.
probeer het gratis.