gpt4 book ai didi

go - 在本地使用带有 go mod 的子包

转载 作者:IT王子 更新时间:2023-10-29 01:14:27 30 4
gpt4 key购买 nike

我的文件系统中有一个名为 bitbucket.org/me/awesome 的 go 包(不在 $GOPATH 中)。

~/awesome> tree
.
├── main.go
├── go.mod
├── go.sum
├── subpackageA
│   └── main.go

我的 go.mod 看起来像:

module bitbucket.org/me/awesome

require (
... # lots of external dependencies
)

replace bitbucket.org/me/awesome => ./

在我的顶级目录的 main.go 中,我调用了一个子包,如下所示:

import "bitbucket.org/me/awesome/subpackageA"

这一切看起来都很正常。 go get 有效。但是,当我将整个存储库克隆到其他地方(比如在 Docker 镜像中)并第一次运行 go get 时,我会收到如下错误:

包 bitbucket.org/me/awesome/subpackageA: https://api.bitbucket.org/2.0/repositories/me/awesome?fields=scm: 403 Forbidden,

这意味着它没有使用包的本地文件系统版本,即使我告诉它使用 replace directivego.mod 文件中。

我做错了什么?我如何确保子包是从文件系统中使用的,而不是试图从互联网上获取的?

最佳答案

Go 没有(真正的)“子包”概念。所有包裹基本上都是平等对待的。这意味着 replace bitbucket.org/me/awesome 不会影响包 bitbucket.org/me/awesome/subpackageA,因为它们是两个独立的、不相关的包。文件夹布局不会引入 subpackageA 与 awsome 的关系,反之亦然 *)。

所以你需要为子包A添加一个单独的替换指令

replace bitbucket.org/me/awesome/subpackageA => ./subpackageA

*) 为绝对正确而挑剔:文件夹布局确实影响名为 internal 的文件夹(不能从其他项目导入),对于名为 vendor 的文件夹(可能包含vendored 包)并搜索 go.mod 文件在 repo 根目录停止。

关于go - 在本地使用带有 go mod 的子包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53365811/

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