Go je skvělý jazyk pro vytváření jednoduchých, ale efektivních webových serverů a webových služeb. Poskytuje vestavěný balíček HTTP, který obsahuje nástroje pro rychlé vytvoření webového nebo souborového serveru.
cílem tohoto tutoriálu je vytvořit webový server, který může přijmout požadavek GET a podat odpověď. Budeme používat server sloužit statické soubory, působí jako souborový server. Poté přimějeme webový server reagovat na žádost o příspěvek pocházející z podání formuláře, například kontaktního formuláře.,
bez dalších okolků, pojďme prozkoumat, jak vytvořit svůj první webový server s Go.
Setup
pro sledování tohoto tutoriálu budete potřebovat Go verzi 1.11 nebo vyšší.
v této části vytvoříme všechny potřebné soubory a vytvoříme správnou strukturu souborů. Poté importujeme naše balíčky a otestujeme, zda nastavení funguje. Nebojte se-nastavení je pro webový server Golang velmi základní.
vytvořte následující soubory a složky podle struktury níže., Soubor server.go
sedí v kořenovém adresáři projektu, stejně jako static
složka, která obsahuje dva soubory HTML: index.html
form.html
.
- server.go- static/- - index.html- - form.html
nyní napíšeme nějaký kód. Otevřete soubor server.go
a importujte požadované balíčky. Použijeme fmt
pro tisk užitečných dat do terminálu a log
pro tisk fatálních chyb v případě selhání webového serveru.
net/http
je nejdůležitějším balíčkem., Poskytuje všechny funkce pro vytvoření HTTP klienta nebo implementace serveru, jako je webový server Golang.
package mainimport ( "fmt" "log" "net/http")
a Konečně, pojďme přidat jednoduchý main()
funkce server.go
soubor, který vypíše hlášení na terminálu.
func main() { fmt.Printf("Starting server at port 8080\n")}
Chcete-li otestovat nastavení, spusťte fiktivní server následujícím příkazem.
go run server.go
Pokud jste postupovali spolu s nastavením, měli byste v terminálu vidět následující výstup.,
Starting server at port 8080
Pokud vše vypadá dobře, dalším krokem je vytvoření webového serveru.
spuštění webového serveru s get routes
v této fázi vytvoříme webový server, který je skutečně obsluhován na portu 8080 a může reagovat na příchozí požadavky GET.
upravíme kód v naší funkci main()
a spustíme webový server na portu 8080. MetodaListenAndServe
je exportována paketem http
, který jsme importovali během prvního kroku. Tato metoda nám umožňuje spustit webový server a určit port pro poslech příchozích požadavků.,
všimněte si, že parametr portu musí být předán jako řetězec předepsaný interpunkcí tlustého střeva. Druhý parametr přijímá psovod pro konfiguraci serveru pro HTTP / 2. To však není důležité pro tento tutoriál, takže můžeme bezpečně předat nil
jako druhý argument.
func main() { fmt.Printf("Starting server at port 8080\n") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) }}
v tomto okamžiku může server spustit, ale stále neví, jak zpracovat požadavky. Musíme předat manipulátory serveru, aby věděl, jak reagovat na příchozí požadavky a jaké požadavky přijmout.,
použijeme funkciHandleFunc
pro přidání manipulátorů tras na webový server. První argument přijímá cestu, kterou potřebuje poslouchat pro /hello
. Zde řeknete serveru, aby poslouchal všechny příchozí požadavky na . Druhý argument přijímá funkci, která drží obchodní logiku, aby správně reagovala na požadavek.
ve výchozím nastavení je tato funkce přijímá ResponseWriter
odeslat odpověď zpět a Request
objekt, který obsahuje další informace o žádosti sám., Můžete například přistupovat k informacím o odeslaných záhlaví, které mohou být užitečné pro ověření žádosti.
jak vidíte, psovod odešle"Hello!”
zprávu, když předáme tuto odpověď ResponseWriter
.
nyní vyzkoušejte toto nastavení. Spusťte webový server pomocí go run server.go
a navštivte . Pokud server reaguje pomocí
"Hello!"
, můžete pokračovat v dalším kroku, kde se naučíte, jak přidat základní zabezpečení do tras webového serveru Golang.,
přidat základní zabezpečení tras
je samozřejmé, že bezpečnost je důležitá. Pojďme prozkoumat některé základní strategie pro zvýšení bezpečnosti vašeho GO webového serveru.
než to uděláme, měli bychom chvíli trvat, než zvýšíme čitelnost našeho kódu. Vytvoříme funkci helloHandler
, která obsahuje veškerou logiku související s požadavkem /hello
.
Tento psovod používá objektRequest
ke kontrole, zda je požadovaná cesta správná. Toto je velmi základní příklad toho, jak můžete použít objekt Request
.,
Pokud je cesta nesprávná, server vrátí uživateli chybu StatusNotFound
. Chcete-li napsat chybu uživateli, můžete použít metodu http.Error
. Všimněte si, že kód StatusNotFound
odpovídá chybě 404. Všechny stavové kódy lze nalézt v dokumentaci Golang.
dále přidáme kontrolu ověření typu požadavku. Pokud metoda neodpovídá GET
, server vrátí novou chybu. Když obě kontroly projdou, server vrátí svou odpověď na úspěch "Hello!"
.,
poslední věc, kterou musíme udělat, je změnit na handleFunc
funkce v našich main()
funkce přijmout výše uvedené helloHandler
funkce.
http.HandleFunc("/hello", helloHandler)
níže je úplný kód souboru server.go
.
dále spustíme webový server Go s go run server.go
. Zabezpečení můžete otestovat zasláním požadavku na příspěvek na pomocí nástroje, jako je Postman nebo cURL.
spusťte statický webový server
v tomto kroku vytvoříme jednoduchý souborový server pro hostování statických souborů., Bude to velmi jednoduchý doplněk k webovému serveru.
abychom se ujistili,že máme obsah, který bude sloužit na webovém serveru, upravíme souborindex.html
umístěný ve složce static
. Chcete-li zachovat věci jednoduché, stačí přidat záhlaví do souboru, který říká „Static Website
.“Pokud si přejete, můžete přidat další soubory nebo stylingové soubory, aby váš webový server vypadal trochu hezčí.
<html> <head> <title>Static Website</title> </head> <body> <h2>Static Website</h2> </body></html>
sloužit static
složky, budete muset přidat dva řádky kódu do server.go
., První řádek kódu vytvoří objekt souborového serveru pomocí funkce FileServer
. Tato funkce přijímá cestu v typu http.Dir
. Proto musíme převést cestu řetězce "./static”
nahttp.Dir
typ cesty.
nezapomeňte zadat trasu Handle
, která přijímá cestu a souborový server. Tato funkce funguje stejným způsobem jako funkce HandleFunc
s některými malými rozdíly. Pro více informací o objektuFileServer
zkontrolujte dokumentaci.,
je čas vyzkoušet kód. Spusťte server pomocí go run server.go
a navštivte . Měli byste vidět záhlaví „
Static Website
„.
přijměte požadavek na odeslání formuláře
nakonec musí webový server reagovat na odeslání formuláře.
přidejme nějaký obsah do souboruform.html
ve složcestatic
. Všimněte si, že akce formuláře je odeslána na /form
. To znamená, že žádost o příspěvek z formuláře bude odeslána na ., Formulář sám žádá o vstup pro dvě proměnné:
name
a address
.
dalším krokem je vytvoření psovoda pro přijetí požadavku/form
. form.html
soubor je již podává prostřednictvím FileServer a lze přistupovat pomocí
First, the function has to call ParseForm()
analyzovat raw query a update r.PostForm
r.Form
. To nám umožní přístup kname
aaddress
pomocí metodyr.FormValue
.,
Na konci funkce, píšeme obě hodnoty do ResponseWriter
pomocí fmt.Fprintf
.
nezapomeňte přidat novou trasu psovoda formuláře do funkce main()
.
http.HandleFunc("/form", formHandler)
nyní celý kód vypadá takto.
vyzkoušení psovoda formuláře
Formulář můžeme otestovat spuštěním serveru pomocí go run server.go
. Po spuštění serveru navštivte . Měli byste vidět dvě vstupní pole a tlačítko Odeslat.,
po vyplnění formuláře stiskněte tlačítko submit
. Server by měl zpracovat váš požadavek na příspěvek a ukázat vám výsledek na stránce odpovědi , jako je níže uvedená odpověď.
Pokud vidíte výsledek výše, úspěšně jste vytvořili svůj první Golang web a souborový server. Gratuluji!
Pokud chcete prozkoumat webové servery Golang dále, dokumentace balíčku golang HTTP je plná skvělých příkladů., Tento tutoriál o psaní webových aplikací V Go je dalším skvělým zdrojem, který pokrývá většinu základů.
LogRocket: Plné viditelnosti do vaší webové aplikace
LogRocket je frontend aplikace monitorování řešení, které umožňuje přehrávání problémy, jako by se stalo ve vašem vlastním prohlížeči. Namísto hádání, proč se chyby dějí, nebo požádat uživatele o screenshoty a výpisy protokolu, LogRocket vám umožní přehrát relaci, abyste rychle pochopili, co se pokazilo., Funguje perfektně s jakoukoli aplikací, bez ohledu na rámec, a má pluginy pro přihlášení dalšího kontextu z Redux, Vuex a @ngrx/store.
kromě protokolování akcí Redux a stavu zaznamenává logrocket protokoly konzoly, chyby JavaScriptu, stacktraces, síťové požadavky/odpovědi pomocí záhlaví + těl, metadat prohlížeče a vlastních protokolů. To také nástroje DOM pro záznam HTML a CSS na stránce, obnovovat pixel perfektní videa i těch nejsložitějších jednostránkových aplikací.
zkuste to zdarma.