5 回答
TA贡献1871条经验 获得超13个赞
这个网站上的答案对我有用。基本上,通过以下方式在 GoLand 中启用 go 模块:
确保在设置中启用了 Go Modules 集成(Preferences / Settings | Go | Go Modules),并且禁用了 GOPATH 索引(Preferences / Settings | Go | GOPATH | Index entire GOPATH)。
我一这样做,红色进口就消失了,一切正常。
TA贡献1864条经验 获得超2个赞
GoLand 支持
最新版本的 GoLand 实现了对 vgo 和 go 模块的支持,但还没有赶上 go1.11rc1 的语法变化。以防万一它在过渡期间对某人有所帮助,我将记录我尝试过的事情以及他们的问题和成功。
TL;DR:不要将您的项目放入其中$GOPATH
并将新项目创建为“Go Module (vgo)”类型,或者为现有项目打开该设置。
将 go1.11rc1 安装为 global 后go
,GoLand 中的项目有三个基本用例go mod
......
在里面 创建一个新项目$GOPATH
:
创建一个类型为“Go Module (vgo)”的新项目:File -> New,选择“Go Module (vgo)”
将您的项目目录设置为内部的内容
$GOPATH
:$GOPATH/src/github.com/stevetarver/insidegopath
创建您的
main.go
文件,引用您的$GOPATH
.将该包添加到您的导入中。
使用此处gif 中所述的go get
GoLand 方式:vgo
点击导入包。
单击红色检查灯泡。
单击“同步包...”。
失败:
go: go mod -sync is now go mod tidy
使用go get
GoLand嵌入式终端方式:
打开嵌入式终端。
go get
你的进口。失败:
ᐅ go get github.com/urfave/cli go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src; ignoring go.mod; see 'go help modules'
让我们打开该变量并重试:
注意:终端插件首选项无法设置环境变量。
设置
GO111MODULE=on
:打开 Preferences -> Appearance & Behavior -> Path Variables,添加GO111MODULE=on
.退出终端,重试,重启GoLand,重试,同上失败。
env | grep GO111MODULE
在终端中什么也不产生。注意:如果这行得通,那将是一个糟糕的解决方案——GoLand 似乎没有为此设置每个项目——该变量会为所有项目打开,这会破坏那些尚未准备好的项目去模块。
根据这个答案,您可以创建一个自定义命令行启动器以包含此环境变量,但是 eeuuwww - 您将如何跟踪何时正常启动 GoLand 以及何时使用命令行启动器?
您可以GO111MODULE=on
在 shell 初始化脚本中进行设置,但这会破坏所有尚未使用 go 模块的项目。
您还可以在每个 go 命令前加上 env var:export GO111MODULE=on; go get github.com/urfave/cli
或在您的项目目录中创建一个go
shell 脚本包装器来为您执行此操作。
这些都不是真正可行的解决方案,但 go 模块的一部分要点是逃离可怕的 go 工作区,所以继续阅读,它会变得更好
在外部 创建一个新项目$GOPATH
:
创建一个类型为“Go Module (vgo)”的新项目:File -> New,选择“Go Module (vgo)”
将您的项目目录设置为外部目录
$GOPATH
修复你的
go.mod
:生成的文件包含module "outsidegopath"
,但我们想要类似的东西module github.com/stevetarver/outsidegopath
。这有点靠不住——GoLand 将尝试重写go.mod
和删除部分路径。重复几次,它将停止尝试。创建您的
main.go
文件。如果您通过 ide 创建它作为一个 go 文件,它将包含package outsidegopath
. 修复它是package main
。现在您可以了
go get github.com/urfave/cli
,它已按$GOPATH/pkg/mod
预期提取。
添加对现有新go mod
项目的支持:
结果证明这非常简单——在 GoLand 中使用 go 模块的最佳方式:
打开首选项:Go -> Go Module (vgo),勾选“Enable Go Modules (vgo) integration”
如上所述工作 - 但您可以
go.mod
使用go mod init module-name
.
TA贡献1775条经验 获得超8个赞
Go 1.13(2019 年 8 月)的模块管理应该更容易:
环境
GO111MODULE
变量继续默认为auto
,但现在只要当前工作目录包含文件或在包含文件的目录下,该auto
设置就会激活命令的模块感知模式——即使当前目录在.go
go.mod
GOPATH/src
此更改简化了内部现有代码的迁移
GOPATH/src
以及模块感知包与非模块感知导入器的持续维护。
$GOPATH
这意味着将不再需要所有“不要将项目放入其中”部分。
只要有一个go.mod
文件,模块就会被识别,从命令行或像 Goland 这样的 IDE。
TA贡献1852条经验 获得超1个赞
我尝试了下面的方法,它解决了问题。Main Menu > File (Menu) > Invalidate Caches .... 选中 Invalidate 和 Restart 的所有复选框。重启后让它同步,问题应该解决了。
- 5 回答
- 0 关注
- 226 浏览
添加回答
举报