Go Modules

Go Modules

  • go mod init <import-name> - создает новый модуль

  • Standard commands like go build or go test will automatically add new dependencies as needed to satisfy imports (updating go.mod and downloading the new dependencies).

  • Что бы импортировать модуль -- он должен быть published

  • go get <url> забирает последнюю версию модуля и обновляет go.sum

  • go get -u - обновить модуль до последней минорной или патч версии

  • go get -u=patch - обновить модуль до последней патч версии

  • go get package@v1.2.3 - обновится до конкретной версии

  • go get package@<commit-has>- взять версию пакета по конкретному коммиту.

  • go get ./..., go mod download - загрузит все зависимости в случае свежего репозитория (аналогично npm install). Так же зависимости будут установлены когда выполняется go run или go build, но нужно очистить кэш go clean -cache -modcache -i -r.

  • go list -m -version <package-name> - список версий пакета

go get -d -u ./...                        # upgrade all modules used in subdirs

go get -d github.com/dep/legacy@none      # remove dep

Нет автоматического способа обновится на другую мажорную версию. С точки зрения Go модулей, мажорная версия — это совершенно другой пакет.

Есть у вас есть модуль, то версия модуля делается путем добавления git tag-а и отправки его в репозиторий:

$ git commit -m "Release v1.0.0"
$ git tag v1.0.1
$ git push --tags origin v1

Версии 2 и более должны сменить путь импорта. Теперь это разные библиотеки. Мы сделаем это добавив новый версионный путь к названию нашего модуля.

module github.com/user/module/v2

Чтобы обновиться, надо соответствующим образом изменить мою программу:

import "github.com/robteix/testmod/v2"
  • go mod tidy чистит зависимости

  • go mod why <module> - скажет как этот модуль используется

On a more general note, the purpose of go mod tidy is to also add any dependencies needed for other combinations of OS, architecture, and build tags. Make sure to run this before every release.

By default all our packages from all projects are downloaded into $GOPATH/pkg/mod directory. If you use Docker containers when developing stuff locally, this may become an issue because dependencies are stored outside of project path (shared with a host filesystem via a bind-mounted volume).

  1. Set GOPATH to the project

  2. Another way is to copy over your project dependencies to vendor folder.

Vendoring

  • go mod vendor - создаст каталог vendor с исходниками зависимостей.

Last updated