Go to ciekawy język programowania do budowy nowoczesnych aplikacji internetowych, a także oprogramowania systemowego. Wywołało to ogromne zamieszanie po wydaniu i obsługuje usługi takie jak Docker, Kubernetes, Terraform, Dropbox i Netflix .
Co więcej, solidna kolekcja wbudowanych pakietów Go sprawia, że jest to doskonały wybór do programowania w Internecie. W tym artykule dowiesz się, jak napisać podstawowy serwer WWW w Go.
Zaimportuj niezbędne pakiety
Pakiet net/HTTP zapewnia wszystko, co potrzebne do stworzenia serwera WWW i klienta. Ten pakiet zawiera kilka przydatnych funkcji do obsługi programowania WWW.
Możesz go zaimportować, dodając poniższą linię na początku kodu źródłowego:
import "net/http"
W artykule wykorzystany zostanie także pakiet fmt do formatowania ciągów znaków oraz pakiet log do obsługi błędów. Możesz zaimportować je pojedynczo, jak pokazano powyżej, lub zaimportować wszystkie pakiety za pomocą jednej instrukcji importu:
import (
"fmt"
"log"
"net/http"
)
Możesz kontynuować pisanie funkcji głównej po zaimportowaniu niezbędnych pakietów. Śmiało, zapisz plik źródłowy z rozszerzeniem .go . Jeśli używasz Vima , użyj poniższego polecenia, aby zapisać i wyjść z Vima:
:wq server.go
Napisz główną funkcję
Programy Go znajdują się bezpośrednio w funkcji głównej, trafnie nazwanej „główną”. Tutaj będziesz musiał wykonać połączenie z serwerem . Dodaj następujące linie do kodu źródłowego i zobacz, co robią:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Przykładem jest zdefiniowanie funkcji głównej za pomocą słowa kluczowego func . W grze Go obowiązują ścisłe zasady dotyczące pozycji nawiasu otwierającego, więc upewnij się, że nawias początkowy znajduje się na właściwej linii. Pierwsza instrukcja w main definiuje, że wszystkie żądania internetowe kierowane do ścieżki głównej ( „/” ) będą obsługiwane przez indeks, funkcję typu http.HandlerFunc .
Druga linia uruchamia serwer WWW poprzez funkcję http.ListenAndServe . Sygnalizuje serwerowi, aby stale nasłuchiwał przychodzących żądań HTTP na porcie serwera 8080. Drugi parametr tej funkcji potrzebny jest do zablokowania programu do końca.
Ponieważ http.ListenAndServe zawsze zwraca błąd, przykład otacza to wywołanie wewnątrz wywołania log.Fatal . Ta instrukcja rejestruje wszelkie komunikaty o błędach generowane po stronie serwera.
Implementuj funkcje przetwarzające
Jak widać, funkcja main wywołuje indeks funkcji obsługi w celu obsługi żądań klientów. Jednak w przykładzie nie zdefiniowano jeszcze tej funkcjonalności dla swojego serwera.
Dodajmy niezbędne instrukcje, aby funkcja indeksu była użyteczna:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Ta funkcja przyjmuje dwa różne argumenty typu http.ResponseWriter i http.Request . Parametr http.ResponseWriter zawiera odpowiedź serwera na przychodzące żądanie w postaci obiektu http.Request .
Funkcja Fprintf z pakietu fmt służy do wyświetlania i manipulowania ciągami tekstowymi. W artykule wykorzystano to do wyświetlenia odpowiedzi serwera na żądania sieciowe. Na koniec element r.URL.Path[1:] służy do pobierania danych po ścieżce głównej.
Dodaj wszystkie pozostałe części
Twój serwer WWW Go będzie gotowy po dodaniu wszystkich pozostałych komponentów. Kod będzie wyglądał następująco:
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))
}
Pierwsza linia jest potrzebna do skompilowania kodu serwera WWW Go jako pliku wykonywalnego.

Skompiluj kod serwera WWW Go jako plik wykonywalny