为什么不能从 go get 导入库?

Why cannot import library from go get?

我使用

下载了 go-redis 客户端
go mod init github.com/my/repo
go get github.com/go-redis/redis/v8

但是显示cannot find package "go.opentelemetry.io/otel/api/trace"。所以我从 ${GOPATH}/src/github.com 中删除了 go-redis,然后再次尝试 运行

go get github.com/go-redis/redis/v8

但它什么也没做。不显示任何错误或任何消息。但是当我尝试导入包时它说

cannot find package "github.com/go-redis/redis/v8" in any of:
 /usr/lib/go/src/github.com/go-redis/redis/v8 (from $GOROOT)
 /home/username/go/src/github.com/go-redis/redis/v8 (from $GOPATH)

我尝试了 go mod tidy go mod clean 但 none 成功了。我该怎么办?

  1. ls $GOPATH ,如果没有显示你的golang库源路径,你应该先设置路径,
  2. 如果第 1 点可行,您应该只做:go mod tidy

tidy 参数使您可以使用 sync 方法下载包,而无需单独执行 go get。

我宁愿使用 go vendoring,它会将你的依赖项添加到 vendor/ 并且 -mod=vendor 会告诉 golang 在本地搜索依赖项。

  1. 删除go.sum
  2. 类型export GOFLAGS=-mod=vendor
  3. 类型go mod tidy && go mod vendor

如果无法导出变量,请使用 go 运行 并使用前缀 GOFLAGS=-mod=vendor 进行构建,例如 GOFLAGS=-mod=vendor go run cmd/main/main.go

不要忘记将 vendor/ 添加到您的 .gitignore