问题标签 [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 投票
1 回答
20587 浏览

go - Go Modules - 目录和包的命名约定

我知道Go Modules仍然是一个实验性的选择加入功能,也许正因为如此,我找不到关于如何命名目录和packages 的明确指导。在Go 博客文章中的
这些包名称和Effective Go 中的包名称中,他们谈到目录应该与包名称匹配 - 但我不确定 Go 模块是否会遵循相同的模式。

如果我想将我的业务逻辑与许多文件捆绑在一起,创建子目录并保持相同的包名package business是否合理?validators/package business


方法 1。

如果我要使用相同的包名:

这看起来很容易发生出口冲突 - 但它很简单。

方法2。

如果validators/路径映射到package validators,则使用代码将如下所示。


我应该如何管理由许多文件组成的包?方法 1. 是否合理,尽管它与上面的博客文章和文档有些矛盾?
或者我应该使用方法 2.,遵守约定,并根据需要添加别名main.go

0 投票
1 回答
57 浏览

go - 如何将不遵守主要子文件夹约定的 Go 包的 v2.0.0 引用为模块

我们正在运行一个峰值以确定我们如何或确实是否可以将我们的堆栈迁移到 Go 模块。我们依赖于 v2.0.0 https://github.com/gbrlsnchs/jwt,但它既没有转换为模块本身,也没有遵守将主要版本放在子文件夹下的 Go 约定。

在将我们的内部包转换为具有这种依赖关系的模块时,我们有哪些选择?

0 投票
1 回答
361 浏览

google-app-engine - 如何使用 go 模块在 GAE SE Go 1.11 上导入私有存储库?

我在 github 上有一个 go library 包存储库作为私有存储库。

我写了一个像下面这样的项目,导入上面的库包。

这是一个目录层次结构。

部署时出现错误,无法

go mod下载时似乎失败了。我认为这导致不允许 GAE 访问私有存储库(这很有说服力)

接下来,我尝试运行go mod vendor以将存储库下载到供应商目录中。

但是我遇到了同样的错误。

帮助!

0 投票
3 回答
38566 浏览

go - Go 模块、私有仓库和 gopath

我们正在将我们的内部代码库从dep依赖管理器转换为 go 模块(vgo或内置于 go1.11.2)。想象一下我们有这样的代码:

$GOPATH/src/mycompany/myprogram/main.go:

$GOPATH/src/mycompany/myprogram/go.mod:

(它没有任何依赖关系;我们的实际代码有)。

$GOPATH/src/mycompany/mylib/lib.go:

我没有对这段代码进行模块化;我做或不做似乎并不重要。

这些都是微不足道的例子,但我们的内部代码遵循与历史上类似的结构。

由于这些目录在 Gopath 上,export GO111MODULE=auto仍然像以前一样构建,并且工作正常(因为我们在 gopath 上而没有使用模块)。但是,当我设置时,export GO111MODULE=on我立即收到错误:

所以我做了一些研究,我想验证我的理解。首先让我说我们的旧方法有效,但我更感兴趣的是更改为使用 go 模块,因为它似乎是 go 项目本身的发展方向。所以。

  1. 似乎 golang 作者的意图是“无点”路径仅属于标准存储库;那就是域名和项目之间应该有绑定。不出所料,我们不使用 go get 进行内部项目。这里是具体的来源:

    通常为标准库保留无点路径;go get (据我所知)从未使用过它们,但 go get 也是使用版本化模块的主要入口点。

    比我更了解 golang 的人可以证实这一点吗?

  2. 我的关键假设是,一旦 go 决定使用模块,所有依赖项都必须是模块,并且 gopath 变得有些无关紧要,除了作为缓存(用于下载的模块)。这个对吗?

  3. 如果这是真的,我们需要在路径上使用私有 gitlab(在我们的例子中)存储库。我知道在处理这个问题上有一个未解决的问题,因此我们可以在必要时实施。我对后果更感兴趣,特别是在私有存储库中进行迭代。以前我们可以在提交任何更改之前在本地开发这些库;现在看来我们有一个选择:

    1. 接受这个远程依赖并迭代。我希望避免像这样远程推拉。如果绝对必要,有需要互联网连接的解决方法。
    2. 将所有内容合并到一个大的 git 存储库中。

如果重要的话,我正在使用go version go1.11.2 linux/amd64,我的同事正在使用darwin/amd64. 如果有帮助,我的 golang 与 Fedora 存储库中安装的完全一样。

所以,tl;dr我的问题是:go 模块是全有还是全无,因为任何依赖都必须使用模块系统(似乎是 go get)来解决,并且 gopath 已经变得多余了?或者我的设置是否有可能导致此失败?有什么方法可以表明应该从 gopath 显式解决依赖关系?

自提出问题以来的更新

  1. 我可以myprogram离开gopath。发生同样的问题(mylib已留在 gopath 中)。
  2. go mod init mycompany/mylib我可以在 mylib 目录中运行,也可以不运行;它根本没有区别。
  3. 在 vgo 上看到了 Russ Cox 的博文。我对离线开发的担忧,我尽量不深入研究,但通过$GOPROXY.
0 投票
1 回答
79 浏览

go - 使用 Go 模块时如何签入包?

我们目前govendor用于管理我们go存储库中的包。由于我们使用了很多包,我们决定将包源代码签入vendor文件夹,以便:

  • 每次需要在构建机器中构建存储库时,节省下载所有包的时间。
  • 避免一个包在网上不可用(被删除、网络问题等)的可能性

我有兴趣modules使用v1.11. 但是,我似乎找不到类似的方法来检查包,而不必下载所有包。

有任何想法吗?

0 投票
1 回答
19219 浏览

go - 使用 go mod 时如何向供应商添加本地依赖项

以前我用过go dep,不过现在office确保官方工具是go mod

当我使用时go dep,我可以将本地依赖包添加到供应商并ignored忽略Gopkg.toml从 repo 搜索包。我可以go dep update正常执行。

现在我用go mod了,我也给vendor添加本地依赖包,添加exclude进去go.mod。但是当我执行时go mod tidy,即使我的项目存在,它也会删除包import xxx

我做了什么:

  1. 创建新项目
  2. 执行 go mod init
  3. 修改 go.modexclude privaterepo.com/bb/bb

  4. 将我的本地模块复制到供应商,因为本地模块位于不支持 https 的私有仓库上。

  5. 现在供应商就像:

    vendor |-github.com/aa/aa |-privaterepo.com/bb/bb

  6. 导入“privaterepo.com/bb/bb”
  7. 执行 go build -mod vendor
  8. 比我得到错误“找不到路径 privaterepo.com/bb/bb 的模块” 9 总是尝试替换,但它也不起作用

那么,我应该怎么做才能将本地包添加到供应商并避免go mod将其删除?

0 投票
1 回答
1998 浏览

go - monorepo 和自定义目录结构中的多个 Go 模块

我有 2 个可能相关的问题。

我有一个测试 monorepo 设置,有 2 个子目录(mod1mod2)。
每个模块都有一个文件go.mod,每个模块都有一个.go包含基本打印代码的文件。其中mod2有一个子目录mod2_lib(其中包含一个.go带有基本打印代码的简单文件),因为我读到 Go 模块基本上是它们自己的小文件GOPATH

在此处输入图像描述

我想调用Run()一个包中的mod2/mod2_lib函数mod1,但我得到的只是build github.com/account_name/test/mod1: cannot find module for path github.com/account_name/test/mod2/mod2_lib

这是我用来解决这个问题的文件:

mod1/t.go

mod2/mod2_lib/t_lib.go

第二个问题是,在这个 monorepo 中,我希望在顶级目录pyrust. 所以我想把我所有的 Go 包放在go/src目录中。其他人如何将此go/src路径导入到他们的项目中(可能仍然有"github.com/account_name/test/mod2/mod2_lib"作为导入路径,而不是"github.com/account_name/test/go/src/mod2/mod2_lib")?

谁能给我一些关于这些问题的指示?我想转而使用 Golang 模块,并放弃GOPATH.

0 投票
2 回答
953 浏览

go - 使用模块,新安装的包不能在项目中引用

go version go1.11.4 darwin/amd64 GOPATH 未设置,但之前设置为 $HOME/Development/go

项目路径在 $HOME/code/ 下

我能够使用命令成功(至少没有错误)安装 go-sql-driver/mysql 包

go get github.com/go-sql-driver/mysql@v1

当我在导入语句中包含对该包的引用时

在我的代码中,我看到了错误

无法导入 github.com/go-sql-driver/mysql(找不到导入:“github.com/go-sql-driver/mysql”)

我在我的项目根目录中运行了 go mod init 并创建了一个 go.mod 文件。当我运行 go get 命令时,我看到一个 require 语句添加到该包的文件中。但似乎该软件包的文件已安装在默认的 $HOME/go 目录中(因为我已取消设置 GOPATH)。

我应该做不同的事情以便我的导入语句可以找到新安装的包吗?使用模块不应该将所有包都安装在项目路径中的某个地方吗?

0 投票
6 回答
27760 浏览

go - Go 模块:校验和不匹配

我最近开始在 Go 中使用模块,但我经常遇到在一台机器上一切正常的问题,但在另一台机器上构建代码库时遇到校验和不匹配。

该问题始终涉及相同的第三方依赖项(github.com/ericlagergren/decimal):

我尝试了各种方法:删除和重新生成go.sum,将 Go 本身升级到最新的补丁版本并从中删除依赖项,go.mod但似乎没有任何东西可以解决这个问题。

有谁知道如何解决这个问题?

0 投票
1 回答
76 浏览

go - 将 html 文件复制到供应商文件夹

用例: 我有 Proj A 和 Proj B。Proj B 依赖于 Proj A。我使用 Go Modules 进行依赖管理和go mod vendor生成供应商文件夹。Proj A 位于 Proj B 的 vendor 文件夹中。

问题: 在 Proj A 中,我有一个 HTML 文件。HTML 文件不会复制到供应商文件夹。

如何强制将 HTML 文件复制到供应商文件夹,以便在 Proj B 中使用?