go - 找不到提供包的模块

标签 go go-modules

我不确定如何解决我在“go mod”中发现的依赖性问题。据我所知,它正在获取某些子依赖项的错误版本,这些子依赖项指向一个不再存在的存储库。

我非常新,所以我确定我搞砸了,我希望得到一些帮助以了解如何解决此问题。请检查这些示例:

通过 go get 获取我唯一的依赖项工作正常

export GOPATH=`mktemp -d`
export MYAPP=`mktemp -d`
cd $MYAPP

cat << EOF > main.go
package main
import (
  "fmt"
  "os"
  "github.com/kubernetes/minikube/pkg/storage"
)
func main() {
  if err := storage.StartStorageProvisioner(); err != nil {
    fmt.Printf("Error starting provisioner: %v\n", err)
    os.Exit(1)
  }
}
EOF

go get github.com/kubernetes/minikube/pkg/storage
go build && echo "WORKED" || echo "FAILED"

但是用go mod获取是不行的

export GOPATH=`mktemp -d`
export MYAPP=`mktemp -d`
cd $MYAPP

cat << EOF > main.go
package main
import (
  "fmt"
  "os"
  "github.com/kubernetes/minikube/pkg/storage"
)
func main() {
  if err := storage.StartStorageProvisioner(); err != nil {
    fmt.Printf("Error starting provisioner: %v\n", err)
    os.Exit(1)
  }
}
EOF

go mod init github/my/repo
go build && echo "WORKED" || echo "FAILED"

我如何让最后一个工作?

$ go version
go version go1.12 darwin/amd64

最佳答案

根据 the Go modules wiki

Day-to-day upgrading and downgrading of dependencies should be done using 'go get', which will automatically update the go.mod file. Alternatively, you can edit go.mod directly.

据我了解,go mod init 不会获取您的依赖项,而是会初始化一个新模块并创建一个 mod 文件来跟踪您的模块正在使用的依赖项版本。

所以去获取你的依赖关系很好。

另一方面,根据 wiki,Go 模块再次提供某些功能:

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).

When needed, more specific versions of dependencies can be chosen with commands such as go get foo@v1.2.3, go get foo@master, go get foo@e3702bed2, or by editing go.mod directly.

关于go - 找不到提供包的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54927867/

相关文章:

string - GoLang 将字符串放入 map

go - 在 rune 和字节之间转换( slice )

go - 使用模块时如何让 Travis 更快地构建

go - 使用模块,无法在项目中引用新安装的包

go - 使用 Go 模块在包中组织本地代码

python - uWSGI + 构建 Go .so 不工作

json - 使用来自 Golang REST 服务的 AngularJS 显示 JSON 字段

go - 数据库返回空集时无效的内存地址或 nil 指针取消引用

docker - 如何将 go mod 与本地包和 docker 一起使用?

go - 如何使用 go modules 删除已安装的包