我正在使用go模块作为依赖项管理,并且在安装这样的东西时遇到了问题:
go get -u github.com/go-critic/go-critic/...
Run Code Online (Sandbox Code Playgroud)
上面的结果是:
go: cannot find main module; see 'go help modules'
Run Code Online (Sandbox Code Playgroud) 我正在使用 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 上的另一个问题。很多人在运行其他命令时都会出现此警告,但他们的解决方案不适用于这种特定情况。
假设我有一个 monorepo 并且有几个单独的 golang 服务:
\nroot \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 services\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 svc1\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 svc2\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\nRun Code Online (Sandbox Code Playgroud)\n而 svc2 将来将依赖于 svc1。另外,要求svc1和svc2可以单独释放。
\n有没有办法可以单独发布模块?go mod 文档仅假设只有 repo,因此它不提供这样的灵活性。
\n我有一个小模块,其中包含一些共享代码。该模块如下所示:
\nShared\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 logging\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 logger.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 db-utils\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db.go\nRun Code Online (Sandbox Code Playgroud)\n如果我尝试从目录内部构建共享模块,我会收到一条错误消息,指出该模块下没有可用的 go 文件。
\nbash-3.2$ go build .\nno Go files in /Users/xxxx/go/src/Shared\nRun Code Online (Sandbox Code Playgroud)\n有没有办法构建一个内部只有包而没有 main.go 文件的 Go 模块?这里的动机是在无法访问互联网或私人存储库的其他 go 模块中使用这些包来检索包。
\n当尝试使用Go 1.18 工具链代替时,您可能会收到错误消息any:interface{}
undeclared name: any (requires version go1.18 or later)
Run Code Online (Sandbox Code Playgroud)
这是为什么?如何解决?在 Go 1.18 中引入any。
简而言之,我当前的用例涉及在 Docker 容器内动态创建 Golang 插件。编译涉及用户的一些新输入(这就是为什么不预先编译的原因),但依赖项是静态的,不会改变。
目前,完整的编译是在 Docker 容器内从头开始完成的(尽管go mod download用于减少一点时间)。我注意到该go build命令最终会编译大量依赖项,这会为插件编译增加大量时间,从而影响我的应用程序的可用性。
是否有 Go 支持的方法或命令来读取go.mod文件并填充GOCACHE目录?使用这样的命令,我将自行运行它Dockerfile,使 Docker 映像包含带有所有已编译构建依赖项的缓存。
我尝试过的:
go mod download:这仅下载依赖项;它不会编译它们。main.go导入所有依赖项的准系统,并go build在我的内部运行Dockerfile以填充缓存。如前所述,这确实解决了我的问题,但感觉有点像黑客。此外,如果将来依赖项发生变化,也需要有人进行更改,这并不理想。