Если вы получаете сообщение об ошибке
Я не вижу зависимости, которую я хотел добавить в go.mod, и получаю эту ошибку:
tools/tools.go:6:5: import "github.com/UnnoTed/fileb0x" is a program, not an importable package
(fileb0x - вещьЯ пытаюсь добавить)
Я не на 100% уверен в последовательности событий, которые это исправили, но я сделал все эти вещи:
Использование пакета "tools"
Я создал каталог tools
:
mkdir -p tools
Я положил в него пакет инструментов (как указано выше):
// +build tools
package tools
import (
_ "github.com/UnnoTed/fileb0x"
)
Обратите внимание, что тег в основном не важно.Вы можете использовать foo:
// +build foo
Однако вы не можете использовать ignore
.Это специальный предопределенный тег.
// +build ignore
// NO NO NO NO NO
// `ignore` is a special keyword which (surprise) will cause
// the file to be ignore, even for dependencies
Обновление go.mod
лучший способ , вероятно, для запуска go mod tidy
:
go mod tidy
Однако, прежде чем я это сделал, я запустил несколько команд, пытаясь выяснить, какая из них заставит его перейти в go.mod
:
go install github.com/UnnoTed/fileb0x # didn't seem to do the trick
go get
go generate ./...
go build ./...
go install ./...
go mod vendor
Позже я сделал git reset
и rm -rf ~/go/pkg/mod; mkdir ~/go/pkg/mod
иобнаружил, что go mod tidy
сам по себе достаточно хорош.
vendoring
Для того, чтобы на самом деле воспользоваться кешем модулей в проекте, вам необходимо скопировать исходный код
go mod vendor
Это захватит все зависимости от go.mod
Вам также нужно изменить почти все ваши команды go, чтобы использовать -mod=vendor
в любых Makefile
s, Dockerfile
s или другихсценарии.
go fmt -mod=vendor ./...
go generate -mod=vendor ./...
go build -mod=vendor ./...
Включая go build
, go get
, go install
и любые go run
, вызываемые go generate
(и даже go generate
)
//go:generate go run -mod=vendor github.com/UnnoTed/fileb0x b0x.toml
package main
// ...