Как создать простой веб-сервер в Go
Go – это захватывающий язык программирования для создания современных веб-приложений, а также системного программного обеспечения. С момента своего выпуска он охватил технологическую отрасль и поддерживает такие сервисы, как Docker, Kubernetes, Terraform, Dropbox и Netflix.
Более того, обширный набор встроенных пакетов Go делает его отличным выбором для веб-программирования. Из этой статьи вы узнаете, как написать базовый веб-сервер на Go.
Импорт необходимых пакетов
Пакет net / HTTP предлагает все необходимое для создания веб-серверов и клиентов. Этот пакет предоставляет несколько полезных функций для работы с веб-программированием.
Вы можете импортировать его, добавив следующую строку в верхней части исходного кода:
import "net/http"
Мы также собираемся использовать пакет fmt для форматирования строк и пакет журнала для обработки ошибок. Вы можете либо импортировать их по отдельности, как показано выше, либо факторизовать все пакеты с помощью одного оператора импорта:
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 определяет, что все веб-запросы, поступающие по корневому ( "/" ) пути, будут обрабатываться index , функцией типа http.HandlerFunc .
Вторая строка запускает веб-сервер через функцию http.ListenAndServe . Он сигнализирует серверу о необходимости непрерывного прослушивания входящих HTTP-запросов на порт 8080 хост-машины. Второй параметр этой функции нужен для блокировки программы до завершения.
Поскольку http.ListenAndServe всегда возвращает ошибку, мы помещаем этот вызов в вызов log.Fatal . Этот оператор регистрирует все сообщения об ошибках, сгенерированные на стороне сервера.
Реализация функции обработчика
Как видите, основная функция вызывает индекс функции-обработчика для обработки клиентских запросов. Однако нам еще предстоит определить эту функцию для нашего сервера.
Давайте добавим необходимые операторы, чтобы можно было использовать функцию индекса:
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 должен быть готов после того, как вы сложите все части вместе. Код должен выглядеть примерно так:
package main
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
Надежные пакеты библиотек Go упрощают веб-программирование для начинающих. Вы можете быстро разработать простые веб-серверы, используя всего несколько строк кода.
Более того, мощные функции тестирования этого языка программирования также упрощают реализацию методологий Agile-программирования. Это группа стратегий разработки программного обеспечения, основанная на итеративной разработке и обширном сотрудничестве между командами.