问题标签 [go-modules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2886 浏览

docker - 如何在 Docker 容器中保留 go 1.11 模块?

我正在将 Go 1.10 应用程序迁移到 Go 1.11。这还包括从depto迁移以mod管理依赖项。

由于应用程序依赖于数据库,因此我使用 adocker-compose来设置本地开发环境。使用 Go 1.10,我只需将本地存储库(包括vendor文件夹)安装到容器中的正确位置GOPATH

由于 Go 1.11 沟渠GOPATH(使用模块时)我认为我可以执行以下操作:

这可行,但每次我docker-compose up(或任何其他调用 Go 工具的命令)时,它都会从头开始解析并重新下载依赖关系树。当我在容器外部(即在我的本地操作系统上)运行命令时,这不会发生(而只是一次)。

如何改进设置,以便 Docker 容器保留该go工具正在下载的模块?

0 投票
2 回答
7893 浏览

go - go build 一直在抱怨:go.mod 有 post-v0 模块路径

在 Go 1.11 发布之后,我一直在尝试将我的存储库移动到 Go 模块,方法是go.mod在它们的根目录中添加一个文件。

我的一个根库my.host/root的版本是 17.0.1,所以我在它的go.mod文件中写道:

v17.0.1我按照 Go 模块手册中的说明标记了该版本。

当我尝试创建一个使用我的根库的新 Go 项目时,例如:

并尝试编译它,我收到以下错误:

go: my.host/root@v0.0.0-20180828034419-6bc78016491a: go.mod 在版本 6bc78016491a 有 post-v0 模块路径“my.host/root/v17”

我不知道为什么会发生这种情况。v17.0.1我在文件中明确添加go.mod,但每次尝试都go build用一个版本替换该条目v0.0.0-20180828034419-6bc78016491a,然后该版本失败,因为在该提交时,我的根库的go.mod文件条目确实以 a 结尾,正如它应该的那样。modulev17

作为记录,此提交与标记v17.0.1版本相同。

我在这里做错了什么?我该如何调试这种情况?

0 投票
2 回答
35856 浏览

go - 在 repo 中使用多个模块时,Go get 找不到本地包

我在使用 go 的新模块系统时遇到问题,因为我想定义一个本地模块并将其导入到主程序中。本地包位于主包/根文件夹的文件夹中。想象一下在$GOPATH.

项目结构

./main.go

./model/person.go

在根文件夹中,我通过调用初始化了一个模块

然后在model/文件夹中,我通过调用初始化子模块

错误

在根文件夹中调用以下命令失败。

go get 的错误信息被截断,我没有解析错误。

我不打算将模块推送到服务器,只是需要一种引用本地包的方式model,所以我分别选择了example.com/localModule/example.com/localModule/model

我在go1.11 darwin/amd64运行 MacOS 10.13.6 的 Macbook 上使用。

0 投票
1 回答
18827 浏览

go - 如何找到 Go 模块源缓存?

我已经将一个项目升级到 Go 1.11 并为我的项目启用了模块支持,但似乎 CircleCI 正在重新下载每个构建的依赖项。我知道 CircleCI 允许在重建之间进行缓存,所以我查看了 Go 模块的文档,虽然它提到了缓存,但我似乎无法找到它实际存在的位置。

Go 模块的源缓存在哪里?

0 投票
1 回答
121 浏览

go - 如何使用 go 模块导入非 go 目录(例如:C src/)?

我使用https://github.com/cloudflare/golz4这是 C 代码的 go 接口。所以src/目录在 dep 树中是强制性的。

大多数依赖管理忽略那些目录(没有.go文件),但留下一个选项来强制它。

eg: go dep has

Vgo/Go1.11 mod 会忽略这些目录,但是否有强制导入它们的选项?

谢谢

0 投票
5 回答
22254 浏览

go - Go Modules:找出正确的伪版本(vX.YZ--) 所需的包

我正在尝试 Go 模块。我的项目需要库golang.org/x/net/html,所以我定义了这个go.mod文件:

并编写了这个演示程序来检查编译时是否加载了依赖项:

当我运行 go build 时,我收到以下错误消息:

显然,我错过了版本号。但是拿哪一个呢?我偶然发现了一篇名为Takig Go Modules for a Spin的文章,在那里我找到了一个包含对包go.mod的引用的文件示例:golang.org/x

作者使用的版本字符串如v0.0.0-20170922011244-0744d001aa84,由 semver 指示 v0.0.0、时间戳和看起来像 git 提交 ID 的东西组成。

我如何找出那些版本字符串?我猜这些golang.org/x包将在某个时候根据语义版本控制进行版本控制,但要真正尝试,我现在go mod需要弄清楚那些。

0 投票
4 回答
50539 浏览

go - 从 go.mod 手动获取依赖项?

我正在使用带有模块支持的 go 1.11。我知道 go 工具现在会在构建/安装时自动安装依赖项。我也明白其中的道理。

我正在使用 docker 来构建我的二进制文件。在许多其他生态系统中,复制依赖项清单(package.json、requirements.txt 等)并将依赖项安装为独立于构建的阶段是很常见的。这利用了 docker 的层缓存,并且使重建速度更快,因为通常代码更改远远超过依赖项更改。

我想知道vgo是否有办法做到这一点?

0 投票
2 回答
21389 浏览

go - 如何在另一个模块中使用“GOPATH”之外的模块?

我使用此命令“go mod init database”在“database”文件夹中的“GOPATH”之外创建了一个库作为供个人使用的模块,但我不知道:

  • 如何在另一个模块中使用/导入这个模块?

操作系统:Windows 7,转到:v1.11

0 投票
1 回答
3737 浏览

go - 构建期间的模块依赖项缓存问题

最近切换到使用 Go 1.11 版本,并试图将我们的项目转换为使用新的模块系统。但是,我在缓存系统上遇到了一个令人沮丧的问题(到目前为止,GOCACHE=off由于过去不相关的问题,我一直在运行,但这不是模块的选项)。

以下命令日志基于使用 Homebrew 将我的系统 Go 升级到 1.11(我通常使用 gvm 来安装和管理 Go 版本,但为此切换到系统构建以查看 gvm 是否是问题)。我将我的 GOPATH 设置为一个临时目录,并将源代码移出默认的 GOPATH(它当前位于~/gotemp/statsbot)。

对于此命令日志,我首先对缓存进行核对,以使其处于新状态。然后我正在做一个构建(以提取任何丢失的依赖项,这也应该重新缓存依赖项),然后对其中一个子目录进行测试。

我在许多构建情况下都看到了同样的错误消息。 通常会go build .成功,但有时会失败并显示类似的消息。运行invariable 修复了这些问题,但我真的不想在每次构建之前运行它,并且在尝试使用 Ginkgo 进行测试时它不起作用,因为这似乎涉及几个连续的编译。go clean --cache

错误本身就是令人困惑的,因为这些文件确实存在:

其中的第二个文件ll是第二条错误消息抱怨的文件丢失,所以我只能假设它在文件仍在生成时尝试访问该文件,或者它正在查看不同的目录(这很难说,因为错误消息只报告文件的相对路径)。

在 Go github 上创建官方问题之前,在此处发布以查看是否有人知道如何解决此问题,或者在我的环境设置中是否有问题。

0 投票
0 回答
271 浏览

go - 如何在 Go 1.11+ for Golang 中使用 GOPATH 之外的整体 repo 架构共享本地模块

上下文:我们使用的是单体存储库架构。这意味着我们有一个包含许多项目的大型 github 存储库,每个项目都使用自己的 ui、node、go 等技术堆栈。

在 go_common 中,我们有用于所有 go 项目的通用代码,例如日志记录、数据库连接、我们的模式/模型作为结构等。我们使用 Go 1.11 并在 go.mod 中声明模块。我们在 GOPATH 之外也有整个工作区和项目。我们不希望任何供应商/第 3 方在我们的 repo 中下载模块,类似于我们在 node.js 项目中的 .gitignore node_modules。所以 go-get 正在按预期将供应商模块下载到 GOPATH src/pkg ,并且可以将它们导入到任何 go 项目中。

但是,我们无法让导入引用 go_common 的模块工作。我们尝试在 go_common 中执行 go build 和 go install,它在 GOPATH/bin 中创建了一个二进制文件,但这并没有帮助它实际上可以引用。有没有一种标准的方法来做到这一点,特别是现在 Go 1.11 和 vgo 集成假设不依赖 GOPATH 并使模块管理更容易...... ??