Можно ли получить список всех стандартных пакетов Go? Как это сделать?
Как получить полный список всех стандартных пакетов Go
Да, вы можете легко получить список всех стандартных пакетов Go. Самый простой и надёжный способ — использовать команду go list std в терминале. Она выводит все пакеты, которые входят в стандартную библиотеку, включая те, что находятся в подпапках (например, net/http, encoding/json).
Но если вам нужно получить этот список программно (внутри вашей Go-программы), есть несколько подходов. Вот самый правильный и рекомендуемый — использовать пакет go/packages из стандартной библиотеки (обратите внимание: это не опечатка, пакет действительно называется go/packages):
package main
import (
"fmt"
"go/packages"
"os"
)
func main() {
cfg := &packages.Config{
Mode: packages.NeedName | packages.NeedFiles,
}
pkgs, err := packages.Load(cfg, "std")
if err != nil {
fmt.Fprintf(os.Stderr, "Ошибка загрузки: %v\n", err)
os.Exit(1)
}
for _, pkg := range pkgs {
fmt.Println(pkg.PkgPath)
}
}
Этот код загружает все стандартные пакеты и выводит их пути. Если вам нужно больше информации (например, список файлов, зависимости или экспортируемые имена), просто добавьте соответствующие флаги в Mode:
packages.NeedFiles— список Go-файлов в пакетеpackages.NeedImports— импортируемые пакетыpackages.NeedExportsFile— файл с экспортируемыми символами
Если вы хотите просто посмотреть список в терминале, используйте:
go list std | sort
Команда sort не обязательна, но так список выглядит аккуратнее. Вы также можете отфильтровать только пакеты верхнего уровня:
go list std | grep -v '/'
Это покажет только корневые пакеты (например, fmt, net, os), исключая подпакеты (например, net/http).
Важное замечание
Использование os/exec для вызова go list из вашей программы — плохая практика. Это добавляет зависимость от установленного Go и может работать по-разному в разных окружениях. Пакет go/packages решает эту проблему, так как он использует Go-тулчейн напрямую.
Также имейте в виду, что список стандартных пакетов меняется от версии к версии Go. Например, в Go 1.21 добавили пакет log/slog, а в Go 1.22 — math/rand/v2. Поэтому не храните захардкоженный список — всегда получайте его динамически.
Альтернативный способ: go doc --all
Если вам нужно не просто имя пакета, а его документация, используйте:
go doc --all std
Но учтите, что вывод будет очень большим. Лучше сразу перенаправить его в файл:
go doc --all std > std_docs.txt
Этот способ полезен для офлайн-изучения, но не для программного использования.
<<Дополнительный способ: список из Go Playground и официальной документации
Если вам не нужно программно получать список, а просто хочется иметь его под рукой для изучения, вот два простых варианта:
1. Официальный сайт Go
Перейдите на pkg.go.dev/std. Там отображается полный каталог стандартной библиотеки с поиском, примерами и документацией. Это самый удобный способ для человека — можно кликать на пакеты и сразу читать документацию.
2. Создайте свой справочный файл
Выполните в терминале:
go list std > go_std_packages.txt
Теперь у вас есть текстовый файл со всеми пакетами. Вы можете открыть его в любом редакторе и отмечать те, которые уже изучили.
Лично я рекомендую сочетать оба подхода: держать файл со списком для быстрой проверки ("этот пакет стандартный или нет?"), а для глубокого изучения использовать pkg.go.dev. Со временем вы запомните основные пакеты (их около 150), и вопрос "что есть в стандартной библиотеке" отпадёт сам собой.
Ответов пока нет.
Войдите чтобы оставить ответ