为了账号安全,请及时绑定邮箱和手机立即绑定

如何配置 goland 以识别“mod”包?

如何配置 goland 以识别“mod”包?

Go
MMMHUHU 2023-03-21 16:02:31
我正在试用 go1.11rc1,我注意到的第一件事是 goland 不识别导入。goland版本公告说:“开箱即用地支持 Go 模块(以前称为 vgo)”有人知道怎么修这个东西吗?问题:像“github.com/urfave/cli”这样的包颜色为红色,悬停文本显示:“无法解析目录...”导入的包项目,如“app := cli.NewApp()”中的“NewApp”,颜色为红色,悬停文本显示:“未解决的参考......”重现步骤:安装go1.11rc1:删除当前安装,安装1.11rc1,检查版本。在go路径外新建一个项目目录:mkdir pjg && cd pjg创建一个go.mod文件:go mod init github.com/stevetarver/pjg向项目中添加一个包:go get github.com/urfave/cligo.mod文件现在看起来像:module github.com/stevetarver/pjg/v1 require github.com/urfave/cli v1.20.0 // indirect创建main.go:package mainimport (    "fmt"    "log"    "os"    "github.com/urfave/cli")func main() {    app := cli.NewApp()    app.Name = "boom"    app.Usage = "make an explosive entrance"    app.Action = func(c *cli.Context) error {        fmt.Println("boom! I say!")        return nil    }    err := app.Run(os.Args)    if err != nil {        log.Fatal(err)    }}在 goland 中查看main.go,并将鼠标悬停在红色文本上以查看问题。mod包存储在$GOPATH/pkg/mod/戈兰版本:2018.2.1去版本:go1.11rc1 darwin/amd64笔记:$GOPATH设置正确 -go get将包放在正确的位置,env 中的 GOPATH 匹配 goland 首选项。将 goland 首选项设置为 Go -> GOPATH -> Module GOPATH 并/Users/starver/code/go/pkg/mod没有解决这个问题。
查看完整描述

5 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

这个网站上的答案对我有用。基本上,通过以下方式在 GoLand 中启用 go 模块:

确保在设置中启用了 Go Modules 集成(Preferences / Settings | Go | Go Modules),并且禁用了 GOPATH 索引(Preferences / Settings | Go | GOPATH | Index entire GOPATH)。

我一这样做,红色进口就消失了,一切正常。


查看完整回答
反对 回复 2023-03-21
?
慕斯王

TA贡献1864条经验 获得超2个赞

GoLand 支持

最新版本的 GoLand 实现了对 vgo 和 go 模块的支持,但还没有赶上 go1.11rc1 的语法变化。以防万一它在过渡期间对某人有所帮助,我将记录我尝试过的事情以及他们的问题和成功。

TL;DR:不要将您的项目放入其中$GOPATH并将新项目创建为“Go Module (vgo)”类型,或者为现有项目打开该设置。

将 go1.11rc1 安装为 global 后go,GoLand 中的项目有三个基本用例go mod......

在里面 创建一个新项目$GOPATH

  1. 创建一个类型为“Go Module (vgo)”的新项目:File -> New,选择“Go Module (vgo)”

  2. 将您的项目目录设置为内部的内容$GOPATH$GOPATH/src/github.com/stevetarver/insidegopath

  3. 创建您的main.go文件,引用您的$GOPATH.

  4. 将该包添加到您的导入中。

使用此处gif 中所述的go getGoLand 方式:vgo

  1. 点击导入包。

  2. 单击红色检查灯泡。

  3. 单击“同步包...”。

  4. 失败go: go mod -sync is now go mod tidy

使用go getGoLand嵌入式终端方式:

  1. 打开嵌入式终端。

  2. go get你的进口。

  3. 失败: ᐅ go get github.com/urfave/cli go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src;    ignoring go.mod;    see 'go help modules'

让我们打开该变量并重试:

  1. 注意:终端插件首选项无法设置环境变量。

  2. 设置GO111MODULE=on:打开 Preferences -> Appearance & Behavior -> Path Variables,添加GO111MODULE=on.

  3. 退出终端,重试,重启GoLand,重试,同上失败。

  4. env | grep GO111MODULE在终端中什么也不产生。

  5. 注意:如果这行得通,那将是一个糟糕的解决方案——GoLand 似乎没有为此设置每个项目——该变量会为所有项目打开,这会破坏那些尚未准备好的项目去模块。

  6. 根据这个答案,您可以创建一个自定义命令行启动器以包含此环境变量,但是 eeuuwww - 您将如何跟踪何时正常启动 GoLand 以及何时使用命令行启动器?

您可以GO111MODULE=on在 shell 初始化脚本中进行设置,但这会破坏所有尚未使用 go 模块的项目。

您还可以在每个 go 命令前加上 env var:export GO111MODULE=on; go get github.com/urfave/cli或在您的项目目录中创建一个goshell 脚本包装器来为您执行此操作。

这些都不是真正可行的解决方案,但 go 模块的一部分要点是逃离可怕的 go 工作区,所以继续阅读,它会变得更好

在外部 创建一个新项目$GOPATH

  1. 创建一个类型为“Go Module (vgo)”的新项目:File -> New,选择“Go Module (vgo)”

  2. 将您的项目目录设置为外部目录$GOPATH

  3. 修复你的go.mod:生成的文件包含module "outsidegopath",但我们想要类似的东西module github.com/stevetarver/outsidegopath。这有点靠不住——GoLand 将尝试重写go.mod和删除部分路径。重复几次,它将停止尝试。

  4. 创建您的main.go文件。如果您通过 ide 创建它作为一个 go 文件,它将包含package outsidegopath. 修复它是package main

  5. 现在您可以了go get github.com/urfave/cli,它已按$GOPATH/pkg/mod预期提取。

添加对现有新go mod项目的支持:

结果证明这非常简单——在 GoLand 中使用 go 模块的最佳方式:

  1. 打开首选项:Go -> Go Module (vgo),勾选“Enable Go Modules (vgo) integration”

  2. 如上所述工作 - 但您可以go.mod使用go mod init module-name.


查看完整回答
反对 回复 2023-03-21
?
UYOU

TA贡献1878条经验 获得超4个赞

在goland的设置中,勾选go module integration解决了我的pro。



查看完整回答
反对 回复 2023-03-21
?
www说

TA贡献1775条经验 获得超8个赞

Go 1.13(2019 年 8 月)的模块管理应该更容易:

环境GO111MODULE变量继续默认为auto,但现在只要当前工作目录包含文件或在包含文件的目录下,该auto设置就会激活命令的模块感知模式——即使当前目录在.gogo.modGOPATH/src

此更改简化了内部现有代码的迁移GOPATH/src以及模块感知包与非模块感知导入器的持续维护。

$GOPATH这意味着将不再需要所有“不要将项目放入其中”部分。
只要有一个go.mod文件,模块就会被识别,从命令行或像 Goland 这样的 IDE


查看完整回答
反对 回复 2023-03-21
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我尝试了下面的方法,它解决了问题。Main Menu > File (Menu) > Invalidate Caches .... 选中 Invalidate 和 Restart 的所有复选框。重启后让它同步,问题应该解决了。



查看完整回答
反对 回复 2023-03-21
  • 5 回答
  • 0 关注
  • 226 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信