你正在使用哪个版本的Go(go version
)?
$ go version
go version
go version go1.20.1 darwin/amd64
你做了什么?
-- go.mod --
module w
go 1.20
require gopkg.in/yaml.v2 v2.4.0
replace gopkg.in/yaml.v2 => gopkg.in/yaml.v3 v3.0.0
-- main.go --
package main
import "gopkg.in/yaml.v2"
func main() {
var t struct{ A string }
_, _ = yaml.Marshal(&t)
}
运行 go build
注意:go.mod不整洁。
你想看到什么?
与模块路径不匹配的错误(gopkg.in/yaml.v2 vs gopkg.in/yaml.v3)
你看到了什么?
没有错误。
go list可以看到替换。
$ go list -f '{{.Module}}' gopkg.in/yaml.v2
gopkg.in/yaml.v2 v2.4.0 => gopkg.in/yaml.v3 v3.0.0
go mod tidy
将gopkg.in/yaml.v3添加到间接需要的组中。go build
在go.sum中有v2的条目时是正常的。
module w
go 1.20
require gopkg.in/yaml.v2 v2.4.0
require gopkg.in/yaml.v3 v3.0.1 // indirect
replace gopkg.in/yaml.v2 => gopkg.in/yaml.v3 v3.0.0
另一方面,
--- go.mod ---
module e
go 1.20
require (
github.com/go-logr/logr v1.2.0 // indirect
k8s.io/klog v1.0.0
)
--- main.go ---
package main
import "k8s.io/klog/v2"
func main() {
_ = klog.Info
}
--- go.sum ---
github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE=
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
k8s.io/klog/v2 v2.90.0 h1:VkTxIV/FjRXn1fgNNcKGM8cfmL1Z33ZjXRTVxKCoF5M=
k8s.io/klog/v2 v2.90.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
go build
返回错误(然而,没有明确讨论这个路径问题)
go build
main.go:3:8: no required module provides package k8s.io/klog/v2; to add it:
go get k8s.io/klog/v2
go mod tidy
成功地将go.mod更新为以下内容而没有错误。
module e
go 1.20
require k8s.io/klog/v2 v2.90.0
require github.com/go-logr/logr v1.2.0 // indirect
replace k8s.io/klog => k8s.io/klog/v2 v2.90.0
在那之后 go build
成功了(我不知道为什么)。
但是 go list -f '{{.Module}}' k8s.io/klog
报告了错误
$ go list -f '{{.Module}}' k8s.io/klog
module k8s.io/klog provides package k8s.io/klog and is replaced but not required; to add it:
go get k8s.io/klog
$ go get k8s.io/klog
go: k8s.io/klog/v2@v2.90.0 used for two different module paths (k8s.io/klog and k8s.io/klog/v2)
1条答案
按热度按时间ycl3bljg1#
@golang/tools-team