HTTP Server

HTTP Сервер|HTTP Server #

// Написання HTTP-серверу не є складною задачою,
// за умови використання пакет `net/http`.
package main

import (
	"fmt"
	"net/http"
)

// Фундаментальним концептом у серверах `net/http` є обробники (handlers)
// Обробник - це об'єкт, що імплементує інтерфейс `http.Handler`.
// Зазвичай, для написання обробника використовується адаптер `http.HandlerFunc`
// з функціює відповідної сигнатури.
func hello(w http.ResponseWriter, req *http.Request) {

	// Функції що використовуються як обробники - приймають
	// `http.ResponseWriter` і вказівник на `http.Request` як аргументи.
	// `http.ResponseWriter` використовується для запису HTTP-відповіді
	// В цьому прикладі - відповіддю є рядок "hello\n".
	fmt.Fprintf(w, "hello\n")
}

func headers(w http.ResponseWriter, req *http.Request) {

	// В даному обробнику проводиться зчитування HTTP-заголовків,
	// і передавання їх як відповідь клієнту.
	for name, headers := range req.Header {
		for _, h := range headers {
			fmt.Fprintf(w, "%v: %v\n", name, h)
		}
	}
}

func main() {

	// Дані рядки реєструють маршрути, які потрібно обслужити серверу,
	// за допомогою функції `http.HandleFunc`. Ця функція
	// встановлює маршрутизатор по замовчуванню і обробник який буде виконано,
	// якщо буде зроблено запит по вказаних маршрутах.
	http.HandleFunc("/hello", hello)
	http.HandleFunc("/headers", headers)

	// Запускаємо HTTP-сервер. В якості порту, на якому очікуються з'єднання
	// встановлено ":8090". Другий параметр вказує на те, що потрібно використовувати
	// маршрутизатор по замовчуванню, який було заздалегідь встановлено.
	http.ListenAndServe(":8090", nil)
}
# Run the server in the background.
$ go run http-servers.go &

# Зробити запит до маршруту "hello"
$ curl localhost:8090/hello
hello

# Завершимо наш сервер
$ kill -9 $!