我正在试用go1.11rc1,我注意到的第一件事是goland无法识别进口。
goland version announcement说:“开箱即用地支持Go模块(以前称为vgo)”
有人知道如何解决这个问题吗?
问题:
复制步骤:
mkdir pjg && cd pjg
go.mod
文件:go mod init github.com/stevetarver/pjg
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
,然后将鼠标悬停在红色文本上以查看问题。
$GOPATH/pkg/mod/
注意:
$GOPATH
的设置正确-go get
将包放在正确的位置,env中的GOPATH匹配goland的首选项。/Users/starver/code/go/pkg/mod
不能解决此问题。答案 0 :(得分:2)
GoLand的最新版本实现了对vgo和go模块的支持,但尚未赶上go1.11rc1语法更改。以防万一在过渡期间对某人有帮助,我将记录我尝试过的事情以及他们的问题和成功。
TL; DR :请勿将您的项目放入$GOPATH
中,并以“ Go Module(vgo)”类型创建新项目,或者为现有项目启用该设置
将go1.11rc1安装为全局go
后,GoLand中的go mod
项目有三个基本用例...
$GOPATH
创建一个新项目:$GOPATH
内的某个目录:$GOPATH/src/github.com/stevetarver/insidegopath
main.go
文件,并引用$GOPATH
中不存在的软件包。如gif here中所述,通过go get
使用vgo
GoLand方式:
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
:打开“偏好设置”->“外观和行为”->“路径变量”,然后添加GO111MODULE=on
。env | grep GO111MODULE
不会产生任何结果。您可以在shell初始化脚本中设置GO111MODULE=on
,但这会破坏所有尚未使用go模块的项目。
您还可以在每个go命令前面加上env var:export GO111MODULE=on; go get github.com/urfave/cli
或在您的项目目录中创建一个go
Shell脚本包装程序。
这些都不是真正可行的解决方案,但是go模块的一部分要从可怕的go工作区中逃脱,所以继续阅读会变得更好
$GOPATH
:$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.mod
创建自己的go mod init module-name
。答案 1 :(得分:0)
The module management使用Go 1.13(2019年8月)应该更容易:
readonly
环境变量继续默认为GO111MODULE
,但是auto
设置现在会在当前工作目录包含以下任何时候激活auto
命令的模块感知模式。 ,或位于包含go
文件的目录下-即使当前目录位于go.mod
之内。此更改简化了
GOPATH/src
中现有代码的迁移,并简化了对具有模块感知能力的软件包以及对非模块感知的进口商的维护。
这意味着将不再需要全部“不要将项目放入GOPATH/src
中。”
只要存在$GOPATH
文件,就可以从命令行or from an IDE like Goland识别模块。
答案 2 :(得分:0)
this site上的答案对我有用。基本上,通过以下方式在GoLand中启用go模块:
确保在设置中启用“ Go模块集成”(“首选项/设置| Go | Go模块”),并禁用GOPATH索引编制(“首选项/设置| Go | GOPATH |索引整个GOPATH”)。
我这样做之后,红色的进口就消失了,一切都正常了。