问题标签 [go-packages]

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 回答
161 浏览

go - 如何在 Go 中列出所有非标准/自定义包?

正如这里提到的,可以使用https://godoc.org/golang.org/x/tools/go/packages的函数获取所有标准 Go 包Load(),其中可以提供“模式”作为输入。

pkgs, err := packages.Load(nil, pattern)

例如,如果pattern = "std"then 它返回所有标准包。

但是,如果我想获取具有自定义模式的自定义/用户定义包的列表,例如只有表单的供应商文件夹github.com/X/Y/vendor/...那么我该如何指定模式呢?

我尝试过使用/vendor/,github.com/X/Y/vendor/以及函数pattern中的其他一些组合。Load()他们都没有工作。

0 投票
9 回答
73477 浏览

go - VSCode:无法导入 Golang 包

我正在我的 GoPath 中编写一个 Go 项目,并且我正在使用 Redigo 包连接到 Redis 服务器。应用程序运行良好,但是在 VSCode 中,包导入时出现这个烦人的错误,这会阻止 VSCode 提供智能感知建议

无法导入 github.com/gomodule/redigo/redis(没有导入路径 github.com/gomodule/redigo/redis 的包数据)

这是我的 VSCode settings.json

我已经将 GO111MODULE env var 设置为 on,这是输出go env

我应该改变什么才能使这项工作?

0 投票
1 回答
249 浏览

linux - Go 是否有无法在其他操作系统上使用的特定于操作系统的软件包?

我不能称自己是绝对的初学者go,而且我绝对不是专家。

今天,我注意到一些非常令人困惑的事情。我正在试验 Unix 套接字和 Windows 命名管道,根据我的研究,有 2 个包支持 Windows 命名管道:

我的操作系统是 Linux,我决定试一试:go get软件包,并编写代码以便稍后在 Windows 机器上进行测试,但令我惊讶的是,至少在 VSCode 中,这些软件包无法被工具。

例如,当我查看它时npipe,我看到它只有npipe_windows.go,如果我没记错的话,它应该会自动在 Windows 上使用。

所以,我认为 Go 中有特定于操作系统的包的概念,对吧?如果是这样,这是否意味着我不能使用例如 VSCode 的 go 工具来针对 Linux 上的 Windows 包进行编码?

在我看来,为了编写可以在 Linux 和 Windows 上运行的东西而不得不切换系统是非常不方便的……尽管我想这只有在我们在 Linux 上开发时才是正确的,而 Windows 应该涵盖两者。

但对我来说,不能在Linux上开发东西是没有意义的;在 IMHO 上开发的最佳环境(当然与 Apple 相关的代码除外)

我在这里错过了什么吗?

谢谢

0 投票
1 回答
968 浏览

git - 我无法从 CircleCi 上的多个存储库中克隆

我无法从 CircleCi 下载我新发布的 go 包。在本地它有效。我可以通过访问 https://github.com/acme/my-lib/tree/v0.0.3来验证我尝试使用的标签是否可用

但是,go get不会下载它。

GOPRIVATE=github.com/acme/ 也试过github.com/acme/*,同样的结果。

运行go get返回这个

去.mod

为什么从 CircleCi 运行时无法识别我的标记版本

我也尝试过改变我的.git/config

https 或 ssh 都不起作用。

git ls-remote 从桌面

来自circleci的git ls-remote

0 投票
1 回答
165 浏览

go - 是否可以在不运行 go install 的情况下更新本地软件包?

我正在尝试将本地文件导入到我的 main.go 文件中,并且本教程(和其他类似教程)说要运行go install <path>以便将该路径作为包导入。这似乎是一种开发本地包的缓慢方法,因为go install <path>每次您想要查看本地包中的更改时都必须运行。

有没有更快的方法来导入/更新本地包?我在更新后使用gomon自动重新加载我的代码,所以理想情况下,我的代码会在更新本地包后自动重新加载。

0 投票
2 回答
2069 浏览

docker - 管理用于 docker 构建的本地/私有 Golang 包和模块

我对 golang 和 docker 还是很陌生,所以在查看了许多线程和互联网资源之后,我最终对应该如何设置感到困惑。

我的问题是由于未找到本地依赖项,我正面临 golang 应用程序的 docker build 错误。

仅供参考(本地机器):go 版本 go1.13.4 linux/amd64

这是我的问题的背景:

我有一个存储库,它将保存将在 Kubernetes 中运行的简单微服务(用 Go 编写)的源代码。所以存储库中的每个文件夹都代表一个服务。我还有一个文件夹“工具”,它重新组合了许多服务共享的辅助功能和资源。我的存储库不在任何 Go 特殊路径中,它位于我的一个驱动器的根目录中。所以这是我的回购的样子:

因此,每个文件夹/服务都是一个独立处理其依赖关系的 go 模块。文件夹工具也是一个模块。我初始化了每个模块go mod init FOLDER_NAME

在服务service1 中,我引用了模块工具来使用一些功能。这是我实现它的方式:(./service1/main.go 的 src)

当我在本地运行service1 的main.go 或者如果我在本地构建它并在之后运行二进制文件时,服务工作正常。

但是当我尝试构建 service1 的dockerfile时,我得到 golang build 错误: build _/go/src/app/tools: cannot find module for path _/go/src/app/tools

这是我的码头文件:

所以我不明白为什么docker无法构建服务?显然他无法定位/识别模块工具,但为什么呢?我为 dockerfile 尝试了许多不同的设置,但我仍然无法弄清楚。

预先感谢您的帮助。

更新:

正如答案中所建议的那样,将dockerfile中 GO111MODULE 的值从 on 更改为 auto 并不能修复构建错误,而是让我得到一个新错误:

0 投票
1 回答
51 浏览

go - 下载模块的原始代理

假设您正在使用 Go 1.13 并设置一个为 Go Modules 初始化的项目。

您可以设置GoCenter或其他代理,而不是使用默认的 Google 代理来下载依赖项。

下载依赖项后,Go 似乎不会跟踪原始代理。最后,无法知道或验证依赖项是来自 Google 代理、自定义代理还是直接来自源代码存储库。理论上,如果您在它们之间切换,即使您提取相同的版本,校验和也可能因原始代理而异。

Go 是否将此信息存储在缓存中的某个位置?我找不到这个信息。任何意见,将不胜感激。

0 投票
0 回答
236 浏览

go - 重命名项目后不允许使用内部包 xxx

我正在尝试基于其他人的代码开始我的第一个 Go 项目,所以我将他的 GitHub 存储库下载为 zip,并将其上传到我自己的存储库。然后使用go get -u github.com/@username/@repo安装我的 repo,并添加一个替换语句go.mod

结果,当我尝试go test ./...go build ./...顶级目录中时,我收到一条错误消息use of internal package xxx/yyy/internal not allowed。我确信唯一的文件包含import xxx/yyy/internal在 dir xxx/yyy,它应该符合 Go 内部包的限制。

我不知道为什么go test ./...在原始回购中运行良好,但在我的回购中失败。我还需要做些什么来修改其他人的回购吗?

任何帮助表示赞赏,谢谢!

0 投票
1 回答
42 浏览

go - 包含两个以上用下划线分隔的单词的 go 包声明问题

大家,我对我所看到的感到困惑;我有以下内容tree

假设我的模块名称 ( mod.go) 是gotest. 内容server.go

内容server_integration_test.go

最后是我的main.go`:

当我运行go build(或go test ./...)时,我收到以下错误:

但是,如果我将我的更改server_integration_test.go为:

一切正常。

有人可以解释一下这里发生了什么吗?

0 投票
1 回答
2708 浏览

go - 获取主要版本模块依赖项时出错

我有一个可执行的 go 模块,我正在尝试执行以下命令

并得到这个错误:

number-manipulation是一个不可执行的 go 模块,带有以下标签 v1.0.0、v1.0.1 和 v2.0.0。

我是新来的。所以有人请告诉我这里有什么问题。

带主包的模块

应用程序.go

去.mod

go 版本 go1.14.3 darwin/amd64

去环境

我试过 set GO111MODULE=on; 但这不会改变 GO111MODULE 的值