Go е мощен и гъвкав език за изграждане на уеб приложения. The нето пакетът играе съществена роля в екосистемата на Go.
Подобно на повечето езици за програмиране от страна на сървъра, Go се доставя с HTTP пакет за взаимодействие с HTTP протокола. Съответният Go пакет е http пакет, подпакет на нето пакет.
Какво представлява пакетът net/http?
The net/http package е една от стандартните библиотеки в Go. Той предоставя пълен набор от функции и типове за изграждане на HTTP клиенти, сървъри и други базирани на HTTP операции. Те включват:
- Функции за правене на HTTP заявки.
- Обработка на заявки и отговори.
- Обслужване на HTTP заявки.
- Свързани обекти като заглавки и бисквитки.
The net/http пакетът също така поддържа TLS/SSL криптиране, HTTP/2 и други разширени функции, което прави пакета основен инструмент за разработчиците на Go.
Много популярни Go библиотеки и рамки, от уеб инструментариума Gorilla до уеб рамката Echo, надграждат върху
net/http пакет.Стартиране на прост HTTP сървър
Стартирането на сървъри е една от основните операции, които трябва да разберете, за да работите с HTTP протокола.
Ето една програма за стартирайте прост сървър в Go:
пакет основен
импортиране (
"fmt"
"net/http"
)// манипулатор е типичен манипулатор на HTTP заявка-отговор в Go; подробности по-късно
функманипулатор(w http. ResponseWriter, r *http. Заявка) {
// Fprintf форматира низа към писател
fmt. Fprintf (w, "Здравей свят!")
}
функосновен() {
http. HandleFunc("/", манипулатор)
http. ListenAndServe(":8080", нула)
}
The манипулатор е типичен манипулатор на заявка-отговор за http пакет. Тази функция записва низа "Hello, World!" към писателя на HTTP отговор.
При стартиране на кода и посещение http://localhost: 8080/ в уеб браузър трябва да видите "Hello, World!" низ, показан във вашия браузър.
Обработка на заявки и отговори
Можете да обработвате входящи заявки с HandleFunc метод на http пакет. The HandleFunc методът приема низ от маршрути и функция за обработка.
The http. Заявка методът е екземпляр на входящата заявка и можете да използвате многобройните методи на вашия екземпляр, за да взаимодействате със заявките към маршрута.
http. HandleFunc("/потребители", функ(w http. ResponseWriter, r *http. Заявка) {
превключвател r. Метод {
случай"ВЗЕМИ":
// обработка на GET заявка
случай"ПУБЛИКУВАНЕ":
// обработка на POST заявка
по подразбиране:
http. Грешка (w, „Невалиден метод на заявка“, http. StatusMethodNotAllowed)
}
})
Кодът по-горе използва http пакет за дефиниране на HTTP манипулираща функция за /users маршрут. Функцията манипулатор слуша за входящи HTTP заявки по маршрута и ги обработва въз основа на метода на заявката (напр. ВЗЕМЕТЕ, ПУБЛИКУВАНЕи т.н.)
Функцията манипулатор приема ResponseWriter и Заявка методи като аргументи. The ResponseWriter е интерфейс, който помага на манипулатора да записва данни като отговор на клиента и Заявка е структура, която съдържа информация за входящата заявка, като HTTP метод, URL, заглавки и т.н.
Функцията манипулатор по-горе използва a превключвател оператор за определяне на метода на заявката и изпълнение на различни кодови блокове въз основа на метода. Ако методът е ВЗЕМЕТЕ, манипулаторът ще се справи с ВЗЕМЕТЕ искане. Иначе методът е ПУБЛИКАЦИЯ; ще се справи с ПУБЛИКУВАНЕ искане.
Ако методът е друг, той ще изпрати http. Грешка със съобщение „Невалиден метод на заявка“ и a StatusMethodNotAllowedHTTP код на състоянието към клиента.
Можете да пишете обратно низове на клиента, като използвате Пишете метод на вашия екземпляр за писане, който приема байтов отрязък от низове и записва низа.
w. Напиши([]байт("Здравей свят!"))
Можете да използвате WriteHeader твой метод ResponseWriter инстанция за запис на заглавки на клиента.
w. WriteHeader (http. Състояние ОК)
Работа с HTTP мидълуер
Мидълуерът се състои от функции, които прихващат входящи HTTP заявки за операции, преди заявката да премине към следващата манипулираща функция.
Ето пример за регистриране на функцията за обработка на междинен софтуер в Go:
функрегистриране на среден софтуер(следващ http. манипулатор)http.Манипулатор {
връщане http. HandlerFunc(функ(w http. ResponseWriter, r *http. Заявка) {
// регистрирайте заявката
следващия. Сервирайте HTTP(w, r)
// регистрирайте отговора
})
}
The регистриране на среден софтуер функцията приема HTTP манипулатор и връща нов HTTP манипулатор. Върнатият HTTP манипулатор е анонимна функция, която приема запис на HTTP отговор и HTTP заявка. Функцията регистрира заявката и извиква Сервирайте HTTP метод на следващия HTTP манипулатор, предаващ записващия отговор и заявката като аргументи.
Можете да управлявате функциите на междинния софтуер с Дръжка метод на http пакет. The Дръжка методът приема маршрута и функцията на междинния софтуер.
http. дръжка("/", loggingMiddleware (http. HandlerFunc (манипулатор)))
Пренасочвания с HTTP пакета
Пренасочването е популярна операция за уеб приложения, които препращат потребителите към други ресурси или уеб страници.
Можете да пренасочите към друга уеб страница, като използвате Пренасочване метод на http пакет.
http. Пренасочване (w, r, " http://example.com", http. StatusMovedPermanently)
The Пренасочване методът приема ResponseWriter и Заявка екземпляри, новия URL адрес на страницата и код на състоянието за пренасочването.
Можете да създавате сложни API в Go
The http package е мощен и гъвкав инструмент за изграждане на сложни API. Можете да използвате богатата стандартна библиотека на Go и други мощни пакети на трети страни за добавяне на функционалност към вашите API, като свързване на бази данни и поддръжка за различни уеб рамки.
С Go можете да създавате мащабируеми, високопроизводителни API, които обработват с лекота значителен трафик на заявки и сложни задачи за обработка на данни.