Go е интересен програмен език за изграждане на модерни уеб приложения, както и системен софтуер. Той предизвика огромен шум след пускането си и захранва услуги като Docker, Kubernetes, Terraform, Dropbox и Netflix .
Освен това стабилната колекция от вградени пакети на Go го прави чудесен избор за уеб програмиране. Тази статия ще ви покаже как да напишете основен уеб сървър в Go.
Импортирайте необходимите пакети
Пакетът net/HTTP предоставя всичко необходимо за създаване на уеб сървър и клиент. Този пакет представя някои полезни функции за работа с уеб програмиране.
Можете да го импортирате, като добавите реда по-долу в началото на вашия изходен код:
import "net/http"
Статията също ще използва пакета fmt за форматиране на низове и пакета log за обработка на грешки. Можете да ги импортирате поотделно, както е показано по-горе, или да импортирате всички пакети с помощта на един оператор за импортиране:
import (
"fmt"
"log"
"net/http"
)
Можете да продължите с писането на основната функция, след като импортирате необходимите пакети. Продължете и запишете изходния файл с разширението .go . Ако използвате Vim , използвайте командата по-долу, за да запазите и излезете от Vim:
:wq server.go
Напишете основната функция
Go програмите се намират директно в основната функция, уместно наречена "main". Тук ще трябва да се обадите на сървъра . Добавете следните редове към изходния код и вижте какво правят:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Примерът е дефиниране на основната функция чрез ключовата дума func . Go има строги правила относно поставянето на отварящата скоба, така че се уверете, че началната скоба е на правилната линия. Първият израз в main дефинира, че всички уеб заявки към главния път ( "/" ) ще се обработват от индекс, функция от тип http.HandlerFunc .
Вторият ред стартира уеб сървъра чрез функцията http.ListenAndServe . Той сигнализира на сървъра непрекъснато да слуша за входящи HTTP заявки на порт 8080 на сървъра. Вторият параметър на тази функция е необходим за блокиране на програмата до края.
Тъй като http.ListenAndServe винаги връща грешка, примерът обвива това извикване в log.Fatal call . Този оператор регистрира всички съобщения за грешка, генерирани от страната на сървъра.
Внедрете функции за обработка
Както можете да видите, основната функция извиква индекса на манипулаторната функция, за да обработва клиентските заявки. Въпреки това, примерът все още не е дефинирал тази функционалност за своя сървър.
Нека добавим необходимите изрази, за да направим индексната функция използваема:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Тази функция приема два различни аргумента от тип http.ResponseWriter и http.Request . Параметърът http.ResponseWriter съдържа отговора на сървъра на входящата заявка под формата на http.Request обект .
Функцията Fprintf от пакета fmt се използва за показване и манипулиране на текстови низове. Статията използва това, за да покаже отговора на сървъра на уеб заявки. И накрая, елементът r.URL.Path[1:] се използва за извличане на данни след основния път.
Добавете всички останали части
Вашият Go уеб сървър ще бъде готов, след като добавите всички останали компоненти. Кодът ще изглежда така:
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))
}
Първият ред е необходим за компилиране на този код на Go уеб сървър като изпълним файл.

Компилирайте кода на този уеб сървър на Go като изпълним файл