Установка пакетов
Был такой эксперимент — dev, но он был закопан в пользу механизма модулей — go mod.
Modules, packages and versions
A module is a collection of packages that are released, versioned, and distributed together. Modules may be downloaded directly from version control repositories or from module proxy servers.
A module is identified by a module path, which is declared in a go.mod
file, together with information about the module’s dependencies. The module root directory is the directory that contains the go.mod
file. The main module is the module containing the directory where the go
command is invoked.
Each package within a module is a collection of source files in the same directory that are compiled together. A package path is the module path joined with the subdirectory containing the package (relative to the module root). For example, the module "golang.org/x/net"
contains a package in the directory "html"
. That package’s path is "golang.org/x/net/html"
.
go.work
Определяет рабочую область — набор go модулей (по умолчанию, текущая директория — активная рабочая область)
Для работы с workspace используем команды:
Или golang.org/x/mod/modfile
для выполнения подобных изменений программно.
Build commands
All commands that load information about packages are module-aware. This includes:
go build
go fix
go generate
go get
go install
go list
go run
go test
go vet
These commands accept the following flags, common to all module commands.
The
-mod
flag controls whethergo.mod
may be automatically updated and whether thevendor
directory is used.-mod=mod
tells thego
command to ignore the vendor directory and to automatically updatego.mod
, for example, when an imported package is not provided by any known module.-mod=readonly
tells thego
command to ignore thevendor
directory and to report an error ifgo.mod
needs to be updated.-mod=vendor
tells thego
command to use thevendor
directory. In this mode, thego
command will not use the network or the module cache.By default, if the
go
version ingo.mod
is1.14
or higher and avendor
directory is present, thego
command acts as if-mod=vendor
were used. Otherwise, thego
command acts as if-mod=readonly
were used.
The
-modcacherw
flag instructs thego
command to create new directories in the module cache with read-write permissions instead of making them read-only. When this flag is used consistently (typically by settingGOFLAGS=-modcacherw
in the environment or by runninggo env -w GOFLAGS=-modcacherw
), the module cache may be deleted with commands likerm -r
without changing permissions first. Thego clean -modcache
command may be used to delete the module cache, whether or not-modcacherw
was used.The
-modfile=file.mod
flag instructs thego
command to read (and possibly write) an alternate file instead ofgo.mod
in the module root directory. The file’s name must end with.mod
. A file namedgo.mod
must still be present in order to determine the module root directory, but it is not accessed. When-modfile
is specified, an alternatego.sum
file is also used: its path is derived from the-modfile
flag by trimming the.mod
extension and appending.sum
.
Vendoring
По умолчанию, модули грузятся в кэш, но если мы хотим поработать со старыми пакетами, мы можем зафризить в папку vendor определенные версии пакетов:
Это создаст папку vendor и туда скопирует все пакеты для разработки и тестов. Так же будет создан файл vendor/modules.txt
, который будет содержать версии пакетов. Можем их посмотреть:
Эти команды сравнят версии в vendor с версиями в go.mod. Если они совпадут, вылетит ошибка. Надо будет ввести go mod vendor
снова.
Начиная с Go 1.14, поддержка vendor включена по умолчанию. Это значит, что go build
и go test
будут подгружать модули из vendor, а не идти в интернет или локальный кэш пакетов. go-команды игнорируют любые другие директории vendor, кроме той, что в корневом модуле.
go get
Обновление модулей в go.mod.
go install
Установка модулей
go mod download
Загрузка модуля в кэш модулей
go list -m
go mod edit
Редактирование и форматирование go.mod.
go mod graph
Граф зависимостей
go mod init
Инициализация модуля в директории
go mod tidy
go mod vendor
Подтягивание в папку vendor зависимостей для сборки и теста проекта
go mod verify
Проверка, что все зависимости разрешены
Last updated