net/http и маршрутизацию. К концу статьи вы сможете создать простой веб-сервер и обрабатывать HTTP-запросы.Прежде чем приступить к написанию кода, важно понять базовую архитектуру веб-приложений. Веб-приложение обычно состоит из следующих компонентов:
net/httpПакет net/http является основным инструментом для создания веб-серверов на Go. Он предоставляет все необходимые функции для обработки HTTP-запросов и отправки ответов.
Давайте начнем с создания простого веб-сервера, который будет отвечать на запросы по корневому пути (/).
Код:
package mainimport ( "fmt" "net/http")func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Привет, мир!")}func main() { http.HandleFunc("/", helloHandler) fmt.Println("Сервер запущен на http://localhost:8080") http.ListenAndServe(":8080", nil)}В этом примере мы создаем функцию helloHandler, которая будет вызываться при запросе к корневому пути. Функция http.HandleFunc регистрирует эту функцию как обработчик для пути /. Затем мы запускаем сервер с помощью http.ListenAndServe, который будет слушать порт 8080.
HTTP-запросы могут быть разных типов (GET, POST, PUT, DELETE и т.д.). В зависимости от типа запроса, вы можете выполнять различные действия. Давайте расширим наш пример, чтобы обрабатывать GET и POST запросы.
Код:
package mainimport ( "fmt" "net/http")func helloHandler(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { fmt.Fprintf(w, "Привет, мир! Это GET-запрос.") } else if r.Method == "POST" { fmt.Fprintf(w, "Привет, мир! Это POST-запрос.") } else { http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) }}func main() { http.HandleFunc("/", helloHandler) fmt.Println("Сервер запущен на http://localhost:8080") http.ListenAndServe(":8080", nil)}Теперь наш сервер будет по-разному отвечать на GET и POST запросы. Если будет использован неподдерживаемый метод, сервер вернет ошибку 405 (Method Not Allowed).
Маршрутизация — это процесс определения, какой обработчик должен быть вызван для конкретного URL-адреса. В Go маршрутизация может быть реализована с помощью пакета net/http, но для более сложных приложений часто используются сторонние библиотеки, такие как gorilla/mux или chi.
gorilla/mux для маршрутизацииДавайте рассмотрим пример использования библиотеки gorilla/mux для создания более сложной маршрутизации.
Код:
package mainimport ( "fmt" "net/http" "github.com/gorilla/mux")func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Привет, мир!")}func userHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) fmt.Fprintf(w, "Привет, пользователь с ID: %s!", vars["id"])}func main() { r := mux.NewRouter() r.HandleFunc("/", helloHandler) r.HandleFunc("/user/{id}", userHandler) http.Handle("/", r) fmt.Println("Сервер запущен на http://localhost:8080") http.ListenAndServe(":8080", nil)}В этом примере мы используем gorilla/mux для создания маршрутов. Мы определили два маршрута: корневой путь (/) и путь /user/{id}, где {id} — это переменная часть URL. В обработчике userHandler мы извлекаем значение id из URL и используем его в ответе.
В этой статье мы рассмотрели основы веб-разработки на Go. Мы изучили архитектуру веб-приложений, работу с пакетом net/http и маршрутизацию. Теперь вы можете создать простой веб-сервер, обрабатывать HTTP-запросы и использовать маршрутизацию для создания более сложных приложений.
Go — это мощный инструмент для создания веб-приложений, и его простота делает его отличным выбором как для начинающих, так и для опытных разработчиков. Продолжайте изучать Go, и вы сможете создавать высокопроизводительные и масштабируемые веб-приложения. Удачи в вашем пути в веб-разработке с Go!
Статистика: Добавлено Михаил Молчанов — 21 мар 2025, 22:31