问题标签 [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.
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()
他们都没有工作。
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
我应该改变什么才能使这项工作?
linux - Go 是否有无法在其他操作系统上使用的特定于操作系统的软件包?
我不能称自己是绝对的初学者go
,而且我绝对不是专家。
今天,我注意到一些非常令人困惑的事情。我正在试验 Unix 套接字和 Windows 命名管道,根据我的研究,有 2 个包支持 Windows 命名管道:
https://github.com/Microsoft/go-winio(我找不到任何关于这个包的文档、帮助、使用方法)
我的操作系统是 Linux,我决定试一试:go get
软件包,并编写代码以便稍后在 Windows 机器上进行测试,但令我惊讶的是,至少在 VSCode 中,这些软件包无法被工具。
例如,当我查看它时npipe
,我看到它只有npipe_windows.go
,如果我没记错的话,它应该会自动在 Windows 上使用。
所以,我认为 Go 中有特定于操作系统的包的概念,对吧?如果是这样,这是否意味着我不能使用例如 VSCode 的 go 工具来针对 Linux 上的 Windows 包进行编码?
在我看来,为了编写可以在 Linux 和 Windows 上运行的东西而不得不切换系统是非常不方便的……尽管我想这只有在我们在 Linux 上开发时才是正确的,而 Windows 应该涵盖两者。
但对我来说,不能在Linux上开发东西是没有意义的;在 IMHO 上开发的最佳环境(当然与 Apple 相关的代码除外)
我在这里错过了什么吗?
谢谢
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
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 并不能修复构建错误,而是让我得到一个新错误:
go - 下载模块的原始代理
假设您正在使用 Go 1.13 并设置一个为 Go Modules 初始化的项目。
您可以设置GoCenter或其他代理,而不是使用默认的 Google 代理来下载依赖项。
下载依赖项后,Go 似乎不会跟踪原始代理。最后,无法知道或验证依赖项是来自 Google 代理、自定义代理还是直接来自源代码存储库。理论上,如果您在它们之间切换,即使您提取相同的版本,校验和也可能因原始代理而异。
Go 是否将此信息存储在缓存中的某个位置?我找不到这个信息。任何意见,将不胜感激。
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 ./...
在原始回购中运行良好,但在我的回购中失败。我还需要做些什么来修改其他人的回购吗?
任何帮助表示赞赏,谢谢!
go - 包含两个以上用下划线分隔的单词的 go 包声明问题
大家,我对我所看到的感到困惑;我有以下内容tree
:
假设我的模块名称 ( mod.go
) 是gotest
. 内容server.go
:
内容server_integration_test.go
:
最后是我的main
.go`:
当我运行go build
(或go test ./...
)时,我收到以下错误:
但是,如果我将我的更改server_integration_test.go
为:
一切正常。
有人可以解释一下这里发生了什么吗?
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 的值