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

wecizke3  于 2022-12-07  发布在  Go
关注(0)|答案(4)|浏览(191)

我正在考虑go1.11rc1,我注意到的第一件事是goland不承认进口。
goland version announcement表示:“支持Go模块(以前称为vgo)”
有人知道怎么解决这个问题吗?
问题:
1.“www.example.com“之类的软件包github.com/urfave/cli被标为红色,并显示以下悬停文本:“无法解析目录...”
1.已导入的软件包项目(如“app:= cli.NewApp()”中的“NewApp”)显示为红色,悬停文本为:“无法解析的引用...”
重现步骤:
1.安装go1.11rc1:删除当前安装,安装1.11rc1,检查版本。
1.在go路径之外创建新的项目目录:mkdir pjg && cd pjg
1.创建go.mod文件:go mod init github.com/stevetarver/pjg
1.将包添加到项目:go get github.com/urfave/cli
go.mod文件现在如下所示:

module github.com/stevetarver/pjg/v1

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

创建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)
    }
}

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

  • mod软件包存储在$GOPATH/pkg/mod/
  • 高兰德版本:2018.2.1
  • go版本:go1.11rc1达尔文/amd 64

备注:

  • $GOPATH设置正确-go get将软件包放在正确的位置,env中的GOPATH与goland首选项匹配。
  • 将goland首选项Go -〉GOPATH -〉模块GOPATH设置为/Users/starver/code/go/pkg/mod并没有解决这个问题。
mbskvtky

mbskvtky1#

this site上的答案对我很有效。基本上,通过以下方式在GoLand中启用go模块:
确保在设置(首选项/设置)中启用Go模块集成|开始|Go模块),并且GOPATH索引被禁用(首选项/设置|开始|GOPATH路径|索引整个GOPATH)。
我一这么做,红色进口就消失了,一切都正常了。

ufj5ltwl

ufj5ltwl2#

GoLand支持

GoLand的最新版本实现了对vgo和go模块的支持,但是它还没有跟上go1.11rc1语法的变化。为了在此期间对其他人有所帮助,我将记录我所尝试的东西以及它们的问题和成功。

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

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

创建新项目inside$GOPATH

1.创建类型为“Go Module(vgo)"的新项目:文件-〉新建,选择“Go模块(vgo)”
1.将项目目录设置为$GOPATH中的某个目录:$GOPATH/src/github.com/stevetarver/insidegopath
1.创建main.go文件,引用$GOPATH中不存在的软件包。
1.将包添加到导入中。
使用go get通过vgo的GoLand方式如gif here中所述:
1.点击导入包。
1.单击红色检查灯泡。
1.单击“同步...的软件包"。
1.失败go: go mod -sync is now go mod tidy
采用go get的GoLand嵌入式终端方式:
1.打开嵌入式终端。

  1. go get您的导入。
    1.失败ᐅ 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.注意:终端插件首选项不提供设置环境变量的方法。
    1.设置GO111MODULE=on:打开首选项-〉外观和行为-〉路径变量,并添加GO111MODULE=on
    1.退出终端,重试,重新启动GoLand,重试,失败同上。
  2. env | grep GO111MODULE不会产生任何结果。
    1.* 注意 *:如果这能起作用,这将是一个糟糕的解决方案- GoLand似乎没有针对每个项目的设置-该变量将为所有项目打开,这将破坏那些没有准备好进入模块的项目。
    1.根据this answer,您可以创建一个自定义的命令行启动器来包含这个env var,但是eeuuwww -您如何跟踪何时正常启动GoLand以及何时使用命令行启动器?
    您可以在shell init脚本中设置GO111MODULE=on,但这会破坏所有尚未使用go模块的项目。
    您还可以在每个go命令前面加上env var:export GO111MODULE=on; go get github.com/urfave/cli或在项目目录中创建一个go shell脚本 Package 器来执行此操作。
  • 这些都不是真正可行的解决方案,但围棋模块的一部分是逃离可怕的围棋工作区,所以继续阅读,它会变得更好 *

创建新项目outside$GOPATH

1.创建类型为“Go Module(vgo)"的新项目:文件-〉新建,选择“Go模块(vgo)”
1.将项目目录设置为$GOPATH以外的目录
1.修复您的go.mod:生成的文件包含module "outsidegopath",但我们想要类似module github.com/stevetarver/outsidegopath的文件。这有点不可靠- GoLand将尝试重写go.mod并删除部分路径。重复几次,它将停止尝试。
1.创建您的main.go文件。如果您通过ide创建此文件作为go文件,它将包含package outsidegopath。将其修改为package main
1.现在,您可以go get github.com/urfave/cli,它将按预期提取到$GOPATH/pkg/mod

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

事实证明,这非常简单--在GoLand中使用go模块的最佳方式:
1.打开偏好设置:Go -〉Go模块(vgo),并选中“启用Go模块(vgo)集成”
1.工作方式如上所述-但您可以使用go mod init module-name创建自己的go.mod

svgewumm

svgewumm3#

使用Go 1.13(2019年8月),模块管理应该更容易:
GO111MODULE环境变量继续默认为auto,但现在只要当前工作目录包含go.mod文件或位于包含go.mod文件的目录下,auto设置就会激活go命令的模块识别模式-**即使当前目录位于GOPATH/src**内。
这一变化简化了GOPATH/src中现有代码的迁移,以及模块感知包与非模块感知导入程序的持续维护。
这意味着所有的“不要把你的项目放在$GOPATH“部分将不再需要。
只要有go.mod文件,模块就会被识别,从命令行or from an IDE like Goland

k5ifujac

k5ifujac4#

我尝试了下面的方法,它解决了这个问题。主菜单〉文件(菜单)〉无效缓存....选择所有复选框无效和重新启动。重新启动后,允许它同步起来,问题应该得到解决。

相关问题