gpt4 book ai didi

go - 主模块和 vendor 目录提供的导入被标记为错误

转载 作者:行者123 更新时间:2023-12-03 10:10:14 36 4
gpt4 key购买 nike

我想了解在复习 go 模块和 vendor 目录时遇到错误的原因。显然,在主模块和 vendor 文件夹中具有相同的包会导致错误,我想了解原因。据我了解,如果有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")
}
vendor/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)
}

最佳答案

有两个同名的包,这就是歧义。导入时 test/testpkg它可以从项目本身或 vendor 目录中导入。
使用 go modules 不会改变 vendoring 行为。其实可以用go mod vendor本地 vendor 模块。如果包出现在 vendor/ 下它将从 vendor 的副本中使用,否则将从模块缓存中下载和使用。但是,如果您的项目中有一个与 vendor 下的包之一同名的包,则存在歧义。

关于go - 主模块和 vendor 目录提供的导入被标记为错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64758247/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com