Стандартная библиотека

Тема дорожной карты · Golang

Ключевые пакеты стандартной библиотеки Go — это основные пакеты, которые должен знать каждый Golang-разработчик, прежде чем обращаться к сторонним зависимостям; они охватывают I/O, сетевое взаимодействие, кодирование, конкурентность, тестирование и взаимодействие с системой в едином согласованном наборе инструментов, поставляемом с каждой установкой Go. Наиболее часто используемые пакеты включают fmt для форматированного ввода-вывода, net/http для HTTP-клиентов и серверов, encoding/json и encoding/xml для сериализации, io и bufio для потоковой обработки, os и filepath для работы с файловой системой, time для арифметики времени, context для отмены и дедлайнов, и sync для мьютексов и sync.WaitGroup. К ключевым пакетам стандартной библиотеки Go также относятся strings, strconv, bytes, regexp, math и sort, которые вместе устраняют необходимость во многих утилитарных библиотеках, требующих сторонних пакетов в других языках. Пакет testing является частью ключевых пакетов стандартной библиотеки Go и предоставляет testing.T, testing.B для бенчмарков и testing.F для фаззинга — все вызываемые через go test без внешних фреймворков. Освоение ключевых пакетов стандартной библиотеки Go перед переходом к фреймворкам Gin, Echo или Fiber и драйверам pgx или sqlx формирует глубокое понимание, необходимое для отладки, оптимизации и корректного инструментирования продакшен Golang-сервисов.

Как это работает

Стандартная библиотека знаменита batteries-included: net/http (production-уровневый HTTP клиент + сервер), encoding/json/xml/csv (сериализация), database/sql (интерфейс — в паре с драйвером типа pgx, go-sql-driver/mysql), os + os/exec + io/fs (файлы, процессы), crypto/* (хеширование, шифры, TLS), context (cancellation + значения), time, regexp, text/template / html/template, log/slog (структурированное логирование, 1.21+).

Когда применять

По умолчанию stdlib — большинство, к чему тянутся в npm/pip других языков, уже в Go-stdlib. log/slog — для нового логирования (заменяет log + logrus + zap для большинства нужд). net/http-сервер напрямую — пока реально не нужен фреймворк. database/sql + драйвер — вместо ORM, кроме случая многих тривиальных CRUD-эндпойнтов.

Типичные ошибки

Ловушки Стандартная библиотека: свой HTTP-роутинг вместо net/http.ServeMux (route patterns в 1.22 — достаточно для многих приложений); игнор http.Server.ReadTimeout и WriteTimeout (slowloris / hung-connection уязвимости); time.Now() прямо в тестах (мок через интерфейс или clockwork); json.Marshal неэкспортированных полей struct (тихо ноль — пишите с заглавной или используйте json:"...").

Связанные понятия

Полезные ресурсы