Go — цікава мова програмування для створення сучасних веб-додатків, а також системного програмного забезпечення. Він викликав величезний резонанс після випуску та підтримує такі служби, як Docker, Kubernetes, Terraform, Dropbox і Netflix .
Крім того, надійна колекція вбудованих пакетів Go робить його чудовим вибором для веб-програмування. Ця стаття покаже вам, як написати базовий веб-сервер у Go.
Імпортуйте необхідні пакети
Пакет net/HTTP містить усе необхідне для створення веб-сервера та клієнта. Цей пакет містить деякі корисні функції для обробки веб-програмування.
Ви можете імпортувати його, додавши рядок нижче на початок вихідного коду:
import "net/http"
У статті також використовуватиметься пакет fmt для форматування рядків і пакет log для обробки помилок. Ви можете імпортувати їх окремо, як показано вище, або імпортувати всі пакети за допомогою одного оператора імпорту:
import (
"fmt"
"log"
"net/http"
)
Ви можете продовжити написання функції main після імпорту необхідних пакетів. Збережіть вихідний файл із розширенням .go . Якщо ви використовуєте Vim , скористайтеся командою нижче, щоб зберегти та вийти з Vim:
:wq server.go
Напишіть основну функцію
Програми Go знаходяться безпосередньо в основній функції, влучно названій «main». Тут вам потрібно буде зателефонувати на сервер . Додайте наступні рядки до вихідного коду та подивіться, що вони роблять:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
У прикладі визначення функції main за допомогою ключового слова func . Go має суворі правила щодо розміщення початкової дужки, тому переконайтеся, що початкова дужка розташована на правильній лінії. Перший оператор у main визначає, що всі веб-запити до кореневого шляху ( "/" ) оброблятимуться функцією index типу 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 як виконуваний файл