我不知道如何解决我在“go mod”中发现的依赖问题。从我所能收集到的信息来看,它获取了一些子依赖的错误版本,这些子依赖指向一个不再存在的repo。
我非常非常新,所以我肯定我搞砸了,我希望一些帮助,以了解如何解决这个问题。请检查以下示例:
用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
1条答案
按热度按时间of1yzvn41#
根据the Go modules wiki
依赖项的日常升级和降级应该使用“go get”来完成,它将自动更新go.mod文件。或者,您可以直接编辑go.mod。
就我所知,go mod init不会获取依赖项,而是初始化一个新模块,并创建一个mod文件来跟踪模块正在使用的依赖项版本。
所以,去获取你的依赖关系是很好的。
另一方面Go模块会根据wiki再次提供某些功能:
像go build或go test这样的标准命令将根据需要自动添加新的依赖项以满足导入(更新go.mod并下载新的依赖项)。
如果需要,可以使用go get foo@v1.2.3、go get foo@master、go get foo@e3702bed2等命令选择更具体的依赖项版本,或者直接编辑go.mod。