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

Ste*_*ver 7 go goland

我正在试用go1.11rc1,而我注意到的第一件事是goland无法识别进口。

的Goland版本公告说:“对围棋的支持模块箱(前身为VGO)的去”

有人知道怎么修这个东西吗?

问题:

  1. 像“ github.com/urfave/cli”这样的软件包显示为红色,并且悬停文字显示:“无法解析目录...”
  2. 导入的包装项目(如“ app:= cli.NewApp()”中的“ NewApp”)显示为红色,并且悬停文字显示:“未解决的引用...”

重现步骤:

  1. 安装go1.11rc1:删除当前安装,安装1.11rc1,检查版本。
  2. 在go路径之外创建一个新的项目目录: mkdir pjg && cd pjg
  3. 创建一个go.mod文件:go mod init github.com/stevetarver/pjg
  4. 将包添加到项目中: go get github.com/urfave/cli

go.mod 文件现在看起来像:

module github.com/stevetarver/pjg/v1

require github.com/urfave/cli v1.20.0 // indirect
Run Code Online (Sandbox Code Playgroud)

创建main.go

package main

import (
    "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)
    }
}
Run Code Online (Sandbox Code Playgroud)

main.go在goland中查看,并将鼠标悬停在红色文本上可以查看问题。

  • mod包存储在 $GOPATH/pkg/mod/
  • goland版本:2018.2.1
  • Go版本:go1.11rc1 darwin / amd64

笔记:

  • $GOPATH设置正确- go get将包放在正确的位置,env中的GOPATH匹配goland首选项。
  • 将goland首选项设置为Go-> GOPATH-> Module GOPATH /Users/starver/code/go/pkg/mod不能解决此问题。

gMa*_*ale 11

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

确保在设置中启用 Go 模块集成(首选项 / 设置 | Go | Go 模块),并禁用 GOPATH 索引(首选项 / 设置 | Go | GOPATH | 索引整个 GOPATH)。

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

  • 我打开了此功能,但仍然看到所描述的问题。将其关闭并再次打开修复了它。 (4认同)
  • IIUC,这应该是公认的答案。当然适合我 (2认同)

Ste*_*ver 8

GoLand支持

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

TL; DR:不要将您的项目放到内部$GOPATH并以“ Go Module(vgo)”类型创建新项目,或者为现有项目启用该设置。

将go1.11rc1安装为您的global以后gogo modGoLand中的项目有三个基本用例...

创建一个新的项目 $GOPATH

  1. 创建类型为“ Go Module(vgo)”的新项目:File-> New,选择“ Go Module(vgo)”
  2. 将项目目录设置为以下内容$GOPATH$GOPATH/src/github.com/stevetarver/insidegopath
  3. 创建main.go一个文件,该文件引用您的中不存在的包$GOPATH
  4. 将该软件包添加到您的导入中。

使用go get通过这样的Goland vgo如在GIF描述在这里

  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:打开“首选项”->“外观和行为”->“路径变量”,然后添加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/cligo在您的项目目录中创建一个shell脚本包装器来完成此任务。

这些都不是真正可行的解决方案,但是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. 打开首选项:转到->转到模块(vgo),然后选中“启用转到模块(vgo)集成”
  2. 按照上述方式工作-但您可以使用创建自己go.modgo mod init module-name


Vis*_*tna 5

In Jetbrains, Goland.

Go to File -> setting then check the menu as shown in screenshot.

在此输入图像描述