【发布时间】:2021-02-21 18:17:48
【问题描述】:
我想了解我在复习 go 模块和供应商目录时遇到的错误的原因。显然,在主模块和供应商文件夹中具有相同的包会导致错误,我想了解原因。据我了解,如果有 go.mod go 甚至不应该检查 vendor 文件夹的依赖关系。一旦我运行 go run ./main.go 我得到以下错误:
main.go:3:8: ambiguous import: found package test/testpkg in multiple directories:
/Users/mic4ael/dev/mine/something-in-go/testpkg
/Users/mic4ael/dev/mine/something-in-go/vendor/test/testpkg
但是,当go build -mod=mod 用于构建二进制文件时,不会发生这种情况。我会很感激解释为什么会这样。
GO111MODULE=""
$ tree
.
├── go.mod
├── main.go
├── test
├── testpkg
│ └── lib.go
└── vendor
└── test
└── testpkg
└── lib.go
去.mod
module test
go 1.15
main.go
package main
import "test/testpkg"
func main() {
testpkg.Echo("Test")
}
供应商/test/testpkg/lib.go
package testpkg
import "fmt"
func Echo(str string) {
fmt.Printf("From vendored package %s\n", str)
}
testpkg/lib.go
package testpkg
import "fmt"
func Echo(str string) {
fmt.Printf("From internal pkg: %s\n", str)
}
【问题讨论】:
-
我可以看到 here 为什么会发生这种情况,但我仍然不明白为什么。
标签: go go-modules govendor