Список прямых и косвенных зависимостей
Это подробно описано в Модули Go 1.11: как обновить и зависимости от более ранней версии вики:
Чтобы просмотреть доступные второстепенные обновления и исправления для всех прямых и косвенных зависимостей, запустите go list -u -m all
.
Для обновления до последней версии для всех прямых и косвенных зависимостей текущего модуля:
- запустите
go get -u
, чтобы использовать последние второстепенные выпуски или выпуски исправлений
- запустите
go get -u=patch
, чтобы использовать последние выпуски исправлений
Вы можете прочитать более подробную информацию здесь: Команда go: список пакетов или модулей.
Также есть стороннее приложение: https://github.com/psampaz/go-mod-outdated < / а>:
Простой способ найти устаревшие зависимости ваших проектов Go. go-mod-outdated предоставляет табличное представление команды go list -u -m -json all, в которой перечислены все зависимости проекта Go и их доступные второстепенные обновления и исправления. Он также позволяет фильтровать косвенные зависимости и зависимости без обновлений.
Выводит только прямые зависимости
Если вас не интересуют косвенные зависимости, мы можем их отфильтровать. Нет флага для фильтрации косвенных зависимостей, но мы можем сделать это с помощью настраиваемого формата вывода.
Флаг -f
указывает альтернативный формат для списка с использованием синтаксиса шаблона пакета.
Таким образом, вы можете указать формат, являющийся шаблоном документа, в соответствии с text/template
.
При перечислении модулей флаг -f
по-прежнему указывает шаблон формата, применяемый к структуре Go, но теперь это структура Module
:
type Module struct {
Path string // module path
Version string // module version
Versions []string // available module versions (with -versions)
Replace *Module // replaced by this module
Time *time.Time // time version was created
Update *Module // available update, if any (with -u)
Main bool // is this the main module?
Indirect bool // is this module only an indirect dependency of main module?
Dir string // directory holding files for this module, if any
GoMod string // path to go.mod file for this module, if any
Error *ModuleError // error loading module
}
type ModuleError struct {
Err string // the error itself
}
Примечание: эта структура Module
определена во внутреннем пакете команды go: https://godoc.org/cmd/go/internal/modinfo
Так, например, чтобы перечислить прямые и косвенные зависимости, как и раньше, но теперь также добавить слово IAMINDIRECT
после косвенных зависимостей, это можно сделать с помощью:
go list -u -m -f '{{.}}{{if .Indirect}} IAMINDIRECT{{end}}' all
Отрицая логику, перечислить прямые и косвенные зависимости, но на этот раз «пометить» только прямые зависимости с помощью IAMDIRECT
:
go list -u -m -f '{{.}}{{if not .Indirect}} IAMDIRECT{{end}}' all
И мы почти у цели. Теперь нам просто нужно отфильтровать строки, которые не содержат IAMDIRECT
слово:
go list -u -m -f '{{.}}{{if not .Indirect}} IAMDIRECT{{end}}' all | grep IAMDIRECT
Альтернатива
Приведенное выше решение основано на команде grep
. Но на самом деле нам это не нужно. Если указанный шаблон приводит к пустому документу, строка пропускается из вывода.
Таким образом, мы можем добиться того же:
go list -u -m -f '{{if not .Indirect}}{{.}}{{end}}' all
Обычно мы вызываем Module.String()
(мы включаем только зависимость), если она не является косвенной. В качестве дополнительного преимущества это решение также работает в Windows.
Вывод списка только тех зависимостей, у которых есть обновления
Аналогично тому, как мы отфильтровывали косвенные зависимости, это тоже «кусок пирога», поскольку структура Module
содержит поле Update
для пакетов / модулей, у которых есть обновления:
go list -u -m -f '{{if .Update}}{{.}}{{end}}' all
Также см. Соответствующий вопрос: Как просмотреть список установленных пакетов go
person
icza
schedule
26.04.2019