首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置goland来识别'mod‘包?

如何配置goland来识别'mod‘包?
EN

Stack Overflow用户
提问于 2018-08-18 17:02:40
回答 4查看 53.9K关注 0票数 35

我带着go1.11rc1旋转,我注意到的第一件事是goland不承认进口。

goland版本公告说:“支持开箱即用的Go模块(以前称为vgo)。”

有人知道怎么解决这个问题吗?

问题:

  1. 像"github.com/urfave/cli“这样的包红色和悬停文本显示:”无法解析目录.“
  2. 导入包项,如"app := cli.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文件现在看起来如下:

代码语言:javascript
复制
module github.com/stevetarver/pjg/v1

require github.com/urfave/cli v1.20.0 // indirect

创建main.go

代码语言:javascript
复制
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)
    }
}

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

  • 国防部包存储在$GOPATH/pkg/mod/
  • goland版本: 2018.2.1
  • go版本: go1.11rc1达尔文/amd64 64

备注:

  • $GOPATH设置正确- go get将包放在正确的位置,GOPATH在env中与goland首选项匹配。
  • 将goland首选项设置为->、GOPATH、->模块、GOPATH到/Users/starver/code/go/pkg/mod没有修复此问题。
EN

回答 4

Stack Overflow用户

发布于 2020-11-24 23:00:43

本站上的答案对我来说是有效的。基本上,通过以下方式在GoLand中启用go模块:

确保在设置中启用了Go模块集成(Preferences / settings、Go、Go、Go模块),并且禁用了GOPATH索引(Preferences / Settings,整个GOPATH)。

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

票数 55
EN

Stack Overflow用户

发布于 2018-08-18 17:02:40

GoLand支持

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

TL;DR:不要将项目放在$GOPATH中,以"Go模块(vgo)“类型创建新项目,或者为现有项目打开该设置。

将go1.11rc1作为全局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. 将该包添加到您的进口产品中。

使用go get,GoLand通过vgo的方式,如gif 这里中所述:

  1. 单击导入包。
  2. 点击红色检查灯泡。
  3. 点击“同步包.”。
  4. FAILgo: go mod -sync is now go mod tidy

使用go get的GoLand嵌入式终端方式:

  1. 打开嵌入式终端。
  2. go get你的进口。
  3. FAILᐅ 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 ->外观&行为->路径变量,并添加GO111MODULE=on
  3. 退出终端,重试,重新启动GoLand,重试,和上面一样失败。
  4. 终端中的env | grep GO111MODULE不会产生任何结果。
  5. 注意:如果这样做有效,那么它将是一个糟糕的解决方案-- GoLand似乎没有针对每个项目的设置--该变量对于所有项目都是打开的,这些项目将打破那些尚未准备好进行go模块的项目。
  6. 根据这个答案,您可以创建一个自定义命令行启动程序来包含这个env,但是eeuuwww --如何跟踪何时正常启动GoLand以及何时使用命令行启动程序?

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

您还可以在每个go命令前面加上env:export GO111MODULE=on; go get github.com/urfave/cli,或者在您的项目目录中为您创建一个go 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. 打开首选项: Go -> Go模块(vgo),并检查“启用Go模块(vgo)集成”
  2. 正如上面所描述的--但是您使用go.mod创建了自己的go mod init module-name
票数 22
EN

Stack Overflow用户

发布于 2019-07-23 16:09:04

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

GO111MODULE环境变量继续默认为auto,但只要当前工作目录包含或位于包含go.mod文件的目录下,auto设置现在就激活go命令的模块感知模式-,即使当前目录位于中。 此更改简化了GOPATH/src中现有代码的迁移,以及与非模块感知进口商一起对模块感知包进行持续维护的过程。

这意味着不再需要“不要将项目放入$GOPATH”部分。

只要有一个go.mod文件,就可以从命令行或者来自像戈兰这样的IDE识别模块.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51910862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档