Ответ
Да, HTTP — это основа моей работы в бэкенд-разработке на Go. Я глубоко понимаю как сам протокол, так и его реализацию в стандартной библиотеке Go.
1. Понимание протокола HTTP:
- Методы:
GET
,POST
,PUT
,PATCH
,DELETE
и их идемпотентность. - Статус-коды: Понимаю семантику основных групп (1xx, 2xx, 3xx, 4xx, 5xx).
- Заголовки (Headers):
Content-Type
,Authorization
,Cache-Control
и другие. - Тело запроса/ответа (Body): Работа с различными форматами, в основном JSON.
2. Стандартная библиотека net/http
:
Я активно использую пакет net/http
для создания как серверов, так и клиентов.
-
Пример HTTP-сервера:
package main import ( "fmt" "log" "net/http" ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") } func main() { http.HandleFunc("/hello", helloHandler) log.Println("Starting server on :8080") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) } }
-
Пример HTTP-клиента:
client := &http.Client{Timeout: 10 * time.Second} resp, err := client.Get("https://example.com") if err != nil { log.Fatal(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))
3. Практические задачи и инструменты:
- Роутинг: Использовал как стандартный
http.ServeMux
, так и более производительные роутеры, например,chi
илиgorilla/mux
. - Middleware: Писал и использовал middleware для логирования, аутентификации (JWT), сбора метрик и обработки паник.
- Работа с данными: Декодирование JSON в структуры, обработка форм, загрузка файлов.
- Архитектурные стили: Проектировал и разрабатывал RESTful API. Также имею опыт работы с gRPC, который часто использует HTTP/2 в качестве транспорта.