如何解决主模块和供应商目录都提供的导入被标记为错误
我想了解我在刷去模块和供应商目录时遇到错误的原因。显然,在主模块和vendor文件夹中具有相同的软件包会导致错误,我想了解原因。据我了解,如果有Find: (X'7B[^,\)]*7D')
Replace: CONVERT($1 using utf8mb4)
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=""
go.mod
$ tree
.
├── go.mod
├── main.go
├── test
├── testpkg
│ └── lib.go
└── vendor
└── test
└── testpkg
└── lib.go
main.go
module test
go 1.15
vendor / test / testpkg / lib.go
package main
import "test/testpkg"
func main() {
testpkg.Echo("Test")
}
testpkg / lib.go
package testpkg
import "fmt"
func Echo(str string) {
fmt.Printf("From vendored package %s\n",str)
}
解决方法
有两个名称相同的软件包,这就是模棱两可。导入test/testpkg
时,可以从项目本身或供应商目录中导入。
使用go模块不会更改供应行为。实际上,您可以使用go mod vendor
在本地供应模块。如果一个软件包出现在vendor/
下,它将从供应商的副本中使用,否则将从模块缓存中下载和使用。但是,如果您的项目中有一个包的名称与供应商下的一个包的名称相同,则存在歧义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。