Go yra įdomi programavimo kalba, skirta kurti šiuolaikines žiniatinklio programas ir sistemos programinę įrangą. Po išleidimo jis sukėlė didžiulį triukšmą ir teikia tokias paslaugas kaip „Docker“, „Kubernetes“, „Terraform“, „Dropbox“ ir „ Netflix“ .
Be to, dėl didelės „Go“ integruotų paketų kolekcijos jis yra puikus pasirinkimas žiniatinklio programavimui. Šiame straipsnyje bus parodyta, kaip „Go“ parašyti pagrindinį žiniatinklio serverį .
Importuokite reikiamus paketus
Net/HTTP pakete yra viskas, ko reikia norint sukurti žiniatinklio serverį ir klientą. Šiame pakete pateikiamos kelios naudingos interneto programavimo funkcijos.
Galite jį importuoti pridėję žemiau esančią eilutę prie šaltinio kodo pradžios:
import "net/http"
Straipsnyje taip pat bus naudojamas fmt paketas eilutėms formatuoti ir žurnalo paketas klaidoms tvarkyti. Galite importuoti juos atskirai, kaip parodyta aukščiau, arba importuoti visus paketus naudodami vieną importavimo teiginį:
import (
"fmt"
"log"
"net/http"
)
Importavę reikiamus paketus galite tęsti pagrindinės funkcijos rašymą. Išsaugokite šaltinio failą su plėtiniu .go . Jei naudojate Vim , naudokite toliau pateiktą komandą, kad išsaugotumėte ir išeitumėte iš Vim:
:wq server.go
Parašykite pagrindinę funkciją
„Go“ programos yra tiesiogiai pagrindinėje funkcijoje, taikliai pavadintoje „pagrindinė“. Čia turėsite paskambinti serveriui . Pridėkite šias eilutes prie šaltinio kodo ir pažiūrėkite, ką jos daro:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Pavyzdys yra pagrindinės funkcijos apibrėžimas naudojant raktinį žodį func . Go galioja griežtos atidarymo petnešos išdėstymo taisyklės, todėl įsitikinkite, kad pradinis įtvaras yra teisingoje linijoje. Pirmasis teiginys pagrindiniame apibrėžia, kad visos žiniatinklio užklausos šakniniam keliui ( "/" ) bus tvarkomos indeksu, kuris yra http.HandlerFunc tipo funkcija .
Antroji eilutė paleidžia žiniatinklio serverį per funkciją http.ListenAndServe . Jis signalizuoja serveriui nuolat klausytis gaunamų HTTP užklausų per serverio 8080 prievadą. Antrasis šios funkcijos parametras reikalingas norint užblokuoti programą iki galo.
Kadangi http.ListenAndServe visada grąžina klaidą, pavyzdyje šis iškvietimas įtraukiamas į žurnalą.Fatal call . Šis pareiškimas registruoja visus serverio pusėje sugeneruotus klaidų pranešimus.
Įdiegti apdorojimo funkcijas
Kaip matote, pagrindinė funkcija iškviečia tvarkyklės funkcijos indeksą, kad galėtų apdoroti kliento užklausas. Tačiau pavyzdyje ši serverio funkcija dar neapibrėžta.
Pridėkime reikalingus teiginius, kad rodyklės funkciją būtų galima naudoti:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Šiai funkcijai naudojami du skirtingi argumentai: http.ResponseWriter ir http.Request . Parametre http.ResponseWriter yra serverio atsakymas į gaunamą užklausą http.Request objekto forma .
Funkcija Fprintf iš fmt paketo naudojama teksto eilutėms rodyti ir manipuliuoti. Straipsnyje tai naudojama norint parodyti serverio atsakymą į žiniatinklio užklausas. Galiausiai elementas r.URL.Path[1:] naudojamas duomenims gauti po šakninio kelio.
Sudėkite visas likusias dalis
Jūsų Go žiniatinklio serveris bus paruoštas, kai pridėsite visus likusius komponentus. Kodas atrodys taip:
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))
}
Pirmoji eilutė reikalinga norint sudaryti šį „Go“ žiniatinklio serverio kodą kaip vykdomąjį failą.

Sukompiliuokite šį „Go“ žiniatinklio serverio kodą kaip vykdomąjį failą