我go.mod
里面有文件root/src/abc
。在root/build-scripts
我有一个脚本,它执行go get
. 当我使用 Go 1.11 时,我没有使用 go 路径,而是使用 mod 文件root/src/abc
处理其他导入,除了构建脚本中使用的包会产生错误:
go:无法确定源目录的模块路径。
有什么建议?
我知道Go Modules仍然是一个实验性的选择加入功能,也许正因为如此,我找不到关于如何命名目录和package
s 的明确指导。
在Go 博客文章中的这些包名称和Effective Go 中的包名称中,他们谈到目录应该与包名称匹配 - 但我不确定 Go Modules 是否会遵循相同的模式。
如果我想将我的业务逻辑package business
与许多文件捆绑在一起,创建子目录validators/
并保持相同的包名package business
是否合理?
someDir
??? business
? ??? businessA.go // package business
? ??? businessB.go // package business
? ??? businessC.go // package business
? ??? validators
? ??? businessValidatorX.go // package business, or validators?
? ??? businessValidatorY.go // package business, or validators?
? ??? businessValidatorZ.go // package business, or validators?
??? …
Run Code Online (Sandbox Code Playgroud) 似乎自 1.11 以来模块的使用方式发生了变化,我试图了解如何从另一个目录引用模块/包。
假设我有一个文件夹结构 \root\module1 \root\module2
我在每个目录中有一个 go.mod,我可以从 \root 目录访问/使用这些模块
如何从模块 1 访问模块 2。这些模块未在任何地方发布(我也不希望它们发布)-我只想访问它们。模块 2 包含我需要在 mondule1 中使用的类型/结构
亲切的问候马丁
我正在编写两个二进制文件,它们都使用两个库(我们可以称它们为 libA 和 libB)。
每个库都位于专用的 git 存储库中,并使用 git 标签来声明版本。例如,libA 的版本为 v1.0.9,libB 的版本为 v0.0.12。
两个二进制文件都有 CLI 标志,我想添加一个调试标志来显示 lib 版本,如下所示:
> ./prog -d
Used libraries:
- libA, v1.0.9
- libB, v0.0.12
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做。
我看到从“外部”设置变量的唯一方法是使用 ldflags (go build -ldflags="-X 'main.Version=v1.0.0'"
例如)。但这种方式似乎不可扩展,如何添加libC?它还意味着管理标签两次,一次在 git 中,一次在 goreleaser.yml 或 makefile 中。
你能帮我找到解决方案吗?
我正在尝试从 github 获取项目的特定包。
但是,当我使用go get [url]
or时go mod vendor
,由于缺乏对我公司的存储库之一的权限,我收到 git fetch 错误。这个存储库是供应的,这就是我们如何绕过它进行 go test、go build 等。
这是错误消息:
go: private.work.repo.com/project/repo@v0.0.0-20190703160253-9c6eb80851f1: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in C:\Users\NICHOLAS.TAN\go\pkg\mod\cache\vcs\37594aeb10b98234e04b4780cf59f32c4ad7bb9da460f552103ae748cea73aa1: exit status 128:
fatal: remote error: Repository not found
The requested repository does not exist, or you do not have permission to
access it.
Run Code Online (Sandbox Code Playgroud)
有没有办法让我使用go get
和/或go mod vendor
不使用这些命令来尝试查看其他模块依赖项?
我正在使用 Go 1.13.1,截至今天最新。
我正在尝试go get
从 GitHub 中完全删除我安装的软件包。本go clean -i <PACKAGE_NAME>
似乎没有工作,因为有文件通过传播,至少,这些目录:
~/go/pkg/mod/github.com/<PACKAGE_NAME>
~/go/pkg/mod/cache/download/github.com/<PACKAGE_NAME>
~/go/pkg/mod/cache/download/sumdb/sum.golang.org/lookup/github.com/<PACKAGE_NAME>
Run Code Online (Sandbox Code Playgroud)
有没有办法在不手动删除所有内容的情况下清理所有内容?
我已经使用sudo apt install golang-go
.
它已成功安装。当我跑步时,go version
我得到go version go1.10.4 linux/amd64
但是当我尝试跑步时,go mod init projectName
我得到以下信息error go: unknown subcommand "mod"
我需要安装 mod 包还是我遗漏了什么?我已经在这个论坛中实施了 christophe 给出的解决方案,但它对我不起作用。
当我打开 Goland 项目时,会运行以下命令:
/usr/local/Cellar/go/1.14/libexec/bin/go list -m -json all #gosetup
Run Code Online (Sandbox Code Playgroud)
它的输出是以下错误:
go list -m: can't compute 'all' using the vendor directory
(Use -mod=mod or -mod=readonly to bypass.)
Run Code Online (Sandbox Code Playgroud)
Goland 无法解析我正在导入的包。当我从命令行构建和运行项目时,它工作正常。
我的项目结构如下:
app/
bin/
pkg/
src/
app/
cmd/
vendor/
go.mod
Run Code Online (Sandbox Code Playgroud)
我GOROOT
的/usr/local/Cellar/go/1.14/libexec
和我GOPATH
的app/
。
在 Goland 设置中,在 Go/GOPATH 下选中了“使用系统环境中定义的 GOPATH”和“索引整个 GOPATH”的框。
在 Go/Go 模块 (vgo) 下,我已选中“启用 Go 模块 (vgo) 集成”和“供应商模式”
当我改变了我刚才注意到GOPATH
到/Users/myname/sdk/go1.13.4
,问题就解决了。这可能是 Homebrew 的问题,还是我不知道的 go 1.14 引入的更改?
我在描述这个问题时详尽无遗,因为我不熟悉 Go,可能会遗漏一些明显的东西。谢谢!
当我运行go mod tidy
几个包时显示错误
> go mod tidy
github.com/myrepo/myproj imports
go.k6.io/k6 imports
go.k6.io/k6/cmd imports
github.com/fatih/color loaded from github.com/fatih/color@v1.12.0,
but go 1.16 would select v1.13.0
To upgrade to the versions selected by go 1.16:
go mod tidy -go=1.16 && go mod tidy -go=1.17
If reproducibility with go 1.16 is not needed:
go mod tidy -compat=1.17
For other options, see:
https://golang.org/doc/modules/pruning
Run Code Online (Sandbox Code Playgroud)
我已经安装了 go 1.17.9。该错误的含义是什么?为什么会触发该错误?
我用这个创建了一个 go 模块:
go mod init rtws
vim main.go # pasted a bunch of code from an example
go mod tidy
Run Code Online (Sandbox Code Playgroud)
这两个文件都导入“github.com/gorilla/websocket”,所以当我使用时,tidy
我期望它会下载该依赖项,但我收到以下警告:
go: warning: "all" matched no packages
随后尝试运行它时抱怨依赖项不存在。
这个错误是什么意思?
编辑:在搜索时,我发现的最相关的事情是SO 上的另一个问题。很多人在运行其他命令时都会出现此警告,但他们的解决方案不适用于这种特定情况。