Как создать простой веб-сервер в 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-программирования. Это группа стратегий разработки программного обеспечения, основанная на итеративной разработке и обширном сотрудничестве между командами.