Использование:
go list [-f format] [-json] [-m] [list flags] [build flags] [packages]
list выводит список именованных пакетов, по одному на строку. Чаще всего используются флаги -f и -json, которые управляют формой вывода, напечатанной для каждого пакета. Другие флаги списка, описанные ниже, контролируют более конкретные детали.
Вывод по умолчанию показывает путь импорта пакета:
bytes
encoding/json
github.com/gorilla/mux
golang.org/x/net/html
Флаг -f указывает альтернативный формат для списка, используя синтаксис шаблона пакета. Вывод по умолчанию эквивалентен -f '{{.ImportPath}}'. Структура, передаваемая в шаблон:
type Package struct {
Dir string // каталог, содержащий исходный код пакета
ImportPath string // путь импорта пакета в dir
ImportComment string // путь в import комментарии в утверждении пакета (package statement)
Name string // имя пакета
Doc string // строка документации пакета
Target string // путь установки
Shlib string // разделяемая (shared) библиотека, которая содержит этот пакет (устанавливается только когда -linkshared)
Goroot bool // этот пакет в Go root?
Standard bool // этот пакет является частью стандартной Go библиотеки?
Stale bool // будет ли 'go install' делать что-либо с этим пакетом?
StaleReason string // объяснение для Stale==true
Root string // Go root или Go path dir содержащий этот пакет
ConflictDir string // эта директория затеняет(shadows) Dir в $GOPATH
BinaryOnly bool // бинарный пакет: не может быть перекомпилирован из исходных файлов
ForTest string // пакет только для использования в именованном тесте
Export string // файл, содержащий данные экспорта (при использовании -export)
Module *Module // информация о модуле, содержащем пакет, если есть (может быть nil)
Match []string // шаблоны командной строки, соответствующие этому пакету
DepOnly bool // пакет является только зависимостью, явно не перечисляемой
// Исходные файлы
GoFiles []string // .go исходные файлы (исключая CgoFiles, TestGoFiles, XTestGoFiles)
CgoFiles []string // .go исходные файлы которые импортируют "C"
CompiledGoFiles []string // .go файлы, представленные компилятору (при использовании -compiled)
IgnoredGoFiles []string // .go исходные файлы игнориремые из-за ограничений сборки
CFiles []string // .c исходные файлы
CXXFiles []string // .cc, .cxx и .cpp исходные файлы
MFiles []string // .m исходные файлы
HFiles []string // .h, .hh, .hpp и .hxx исходные файлы
FFiles []string // .f, .F, .for и .f90 Fortran исходные файлы
SFiles []string // .s исходные файлы
SwigFiles []string // .swig файлы
SwigCXXFiles []string // .swigcxx файлы
SysoFiles []string // .syso object файлы для добавления в архив
TestGoFiles []string // _test.go файлы в пакете
XTestGoFiles []string // _test.go файлы во внешнем пакете
// Cgo директивы
CgoCFLAGS []string // cgo: флаги для C компилятора
CgoCPPFLAGS []string // cgo: флаги для C препроцессора
CgoCXXFLAGS []string // cgo: флаги для C++ компилятора
CgoFFLAGS []string // cgo: флаги для Fortran компилятора
CgoLDFLAGS []string // cgo: флаги для линкера (linker)
CgoPkgConfig []string // cgo: pkg-config имена
// Информация о зависимости
Imports []string // import использованные для этого пакета
ImportMap map[string]string // карта (map) из исходного import в ImportPath (идентификационные записи опущены)
Deps []string // все (рекурсивно) импортированные зависимости
TestImports []string // импорты из TestGoFiles
XTestImports []string // импорты из XTestGoFiles
// Информация об ошибке
Incomplete bool // этот пакет или зависимость имеет ошибку
Error *PackageError // ошибка загрузки пакета
DepsErrors []*PackageError // ошибки загрузки зависимостей
}
Пакеты, хранящиеся в каталогах поставщиков (vendor directories), сообщают о ImportPath, который включает путь к каталогу поставщика (например, "d/vendor/p" вместо "p"), так что ImportPath уникально идентифицирует данную копию пакета. Списки Imports, Deps, TestImports и XTestImports также содержат эти расширенные пути импорта.
Информация об ошибке, если таковая имеется,
type PackageError struct {
ImportStack []string // кратчайший путь от пакета, названного в командной строке, к этому
Pos string // позиция ошибки (если есть, файл:строка:столбец)
Err string // сама ошибка
}
Информация модуля является Module структурой, определенной в обсуждении списка -m ниже.
Функция шаблона "join" вызывает strings.Join.
Функция шаблона "context" возвращает контекст сборки, определенный как:
type Context struct {
GOARCH string // целевая архитектура
GOOS string // целевая операционная система
GOROOT string // Go root
GOPATH string // Go path
CgoEnabled bool // можно ли использовать cgo
UseAllFiles bool // использовать файлы независимо от +build строк, имен файлов
Compiler string // компилятор для предположения при вычислении целевых путей
BuildTags []string // build огрничения для соотвествия в +build строках
ReleaseTags []string // выпуска текущего релиза совместимого с
InstallSuffix string // суффикс для использования в имени установочного каталога
}
Для получения дополнительной информации о значении этих полей см. документацию для типа Context пакета go/build.
Флаг -json заставляет печатать данные пакета в формате JSON вместо использования формата шаблона.
Флаг -compiled заставляет список устанавливать CompiledGoFiles в исходные файлы Go, представленные компилятору. Обычно это означает, что он повторяет файлы, перечисленные в GoFiles, а затем также добавляет код Go, сгенерированный путем обработки CgoFiles и SwigFiles. Список Imports содержит объединение всех импортов из GoFiles и CompiledGoFiles.
Флаг -deps заставляет list перебирать не только именованные пакеты, но и все их зависимости. Он просматривает их в глубине первого обхода после заказа, так что пакет перечисляется только после всех его зависимостей. Для пакетов, явно не указанных в командной строке, для поля DepOnly будет установлено значение true.
Флаг -e изменяет обработку ошибочных пакетов, которые не могут быть найдены или искажены. По умолчанию команда list выводит ошибку на стандартную ошибку для каждого ошибочного пакета и не учитывает пакеты при обычной печати. С флагом -e команда list никогда не печатает ошибки в стандартную ошибку и вместо этого обрабатывает ошибочные пакеты обычной печатью. Ошибочные пакеты будут иметь непустое поле ImportPath и не нулевую Error; другая информация может отсутствовать или может не отсутствовать (обнулена).
Флаг -export приводит к тому, что list устанавливает в поле Export имя файла, содержащего актуальную информацию об экспорте для данного пакета.
Флаг -find заставляет список идентифицировать именованные пакеты, но не разрешать их зависимости: списки Imports и Deps будут пустыми.
Флаг -test заставляет list сообщать не только о названных пакетах, но и об их бинарных файлах тестов (для пакетов с тестами), чтобы передать инструментам анализа исходного кода, как именно создаются тестовые бинарные файлы. Указанный путь импорта для тестового бинарного файла - это путь импорта пакета, за которым следует суффикс ".test", как в "math/rand.test". При создании теста иногда необходимо перестроить определенные зависимости специально для этого теста (чаще всего сам тестируемый пакет). Указанный путь импорта пакета, перекомпилированного для конкретного тестового бинарного файла, сопровождается пробелом и именем тестового бинарного файла в скобках, как в "math/rand [math/rand.test]" или "regexp [sort.test]". В поле ForTest также указывается имя тестируемого пакета ("math/rand" или "sort" в предыдущих примерах).
Пути к файлам Dir, Target, Shlib, Root, ConflictDir и Export - это абсолютные пути.
По умолчанию списки GoFiles, CgoFiles и т.д. Содержат имена файлов в Dir (то есть пути относительно Dir, а не абсолютные пути). Сгенерированные файлы, добавленные при использовании флагов -compiled и -test, представляют собой абсолютные пути, ссылающиеся на кэшированные копии сгенерированных исходных файлов Go. Хотя они являются исходными файлами Go, пути могут не заканчиваться на ".go".
Флаг -m заставляет list перечислять модули вместо пакетов.
При перечислении модулей флаг -f по-прежнему указывает шаблон формата, применяемый к Go структуре, но теперь это Module структура:
type Module struct {
Path string // путь к модулю
Version string // версия модуля
Versions []string // доступные версии модуля (с -versions)
Replace *Module // замещен на этот модуль
Time *time.Time // временная версия была создана
Update *Module // доступно обновление, если есть (с -u)
Main bool // это основной (main) модуль?
Indirect bool // является ли этот модуль только косвенной зависимостью основного модуля?
Dir string // каталог, содержащий файлы для этого модуля, если есть
GoMod string // путь к файлу go.mod для этого модуля, если есть
Error *ModuleError // ошибка загрузки модуля
}
type ModuleError struct {
Err string // сама ошибка
}
По умолчанию выводится путь к модулю, а затем информация о версии и замене, если таковые имеются. Например, 'go list -m all' может вывести:
my/main/module
golang.org/x/text v0.3.0 => /tmp/text
rsc.io/pdf v0.1.1
Структура Module имеет метод String, который форматирует эту строку вывода, поэтому формат по умолчанию эквивалентен -f '{{.String}}'.
Обратите внимание, что когда модуль был заменен, его поле Replace описывает модуль замены, а его поле Dir устанавливается на исходный код замены, если таковой имеется. (То есть, если Replace не ноль, тогда Dir установлен в Replace.Dir, без доступа к замененному исходному коду.)
Флаг -u добавляет информацию о доступных обновлениях. Когда последняя версия данного модуля новее текущей, list -u устанавливает в поле Update в Module информацию о более новом модуле. Метод String модуля указывает доступное обновление путем форматирования новой версии в скобках после текущей версии. Например, 'go list -m -u all' может вывести:
my/main/module
golang.org/x/text v0.3.0 [v0.4.0] => /tmp/text
rsc.io/pdf v0.1.1 [v0.1.2]
(Для инструментов 'go list -m -u -json all' может быть удобнее анализировать.)
Флаг -versions приводит к тому, что list устанавливает в поле Versions модуля список всех известных версий этого модуля, упорядоченных в соответствии с семантической версией, начиная с самой ранней и последней версии. Флаг также изменяет формат вывода по умолчанию для отображения пути к модулю, за которым следует разделенный пробелами список версий.
Аргументы для списка -m интерпретируются как список модулей, а не пакетов. Основным модулем является модуль, содержащий текущий каталог. Активные модули являются основным модулем и его зависимостями. Без аргументов list -m показывает основной модуль. С аргументами list -m показывает модули, указанные аргументами. Любой из активных модулей может быть указан его путем к модулю. Специальный шаблон "all" определяет все активные модули, сначала основной модуль, а затем зависимости, отсортированные по пути модуля. Шаблон, содержащий "...", указывает активные модули, чьи пути модулей соответствуют шаблону. Запрос формы path@version указывает результат этого запроса, который не ограничивается активными модулями. Смотрите 'go help modules' для получения дополнительной информации о запросах модулей.
Функция шаблона "module" принимает один строковый аргумент, который должен быть путем к модулю или запросом, и возвращает указанный модуль в виде структуры модуля. Если произойдет ошибка, результатом будет структура модуля с полем Error, отличным от nil.
Для получения дополнительной информации о флагах сборки см. 'go help build'.
Подробнее об указании пакетов см. 'go help packages'.
Для получения дополнительной информации о модулях см. 'go help modules'.
Читайте также:
- Команды go: go get, загрузка и установка пакетов и зависимостей
- Инструмент go, команды
- Команды go: go build, компиляция пакетов и зависимостей
Комментариев нет:
Отправить комментарий