Go模块不会识别GOPATH下的文件。

3
我正在尝试在Intellij中设置GO模块,并尝试在GOPATH下导入包。当我使用Go模块时,似乎无法从GOPATH“导入”软件包。你有什么想法是我做错了什么吗?
以下是屏幕截图。左图:GoModules不识别该软件包。右图:简单的GO项目,可以识别该软件包。
我尝试进行同步包操作,但没有成功。
Go版本-1.12.3

Initellij_GO_MOD.

2个回答

9
两种支持的模式(“GOPATH 模式”和“模块感知模式”)是互斥的。这意味着你不能同时拥有两者,不能混合使用模块和 GOPATH。
引用自命令 go:GOPATH 和模块: 当使用模块时,GOPATH 不再用于解析导入。但它仍然用于存储已下载的源代码(在 GOPATH/pkg/mod 中)和编译的命令(在 GOPATH/bin 中)。
还有命令 go:初步模块支持: 为了更精细的控制,Go 1.11中的模块支持遵循一个临时环境变量GO111MODULE,它可以设置为三个字符串值之一:off、on或auto(默认)。如果GO111MODULE=off,则go命令永远不会使用新的模块支持。相反,它会在vendor目录和GOPATH中查找依赖项;我们现在将其称为“GOPATH模式”。如果GO111MODULE=on,则go命令需要使用模块,并且不会查询GOPATH。我们称之为命令处于模块感知模式或“模块感知模式”下运行。如果GO111MODULE=auto或未设置,则go命令基于当前目录启用或禁用模块支持。只有当当前目录位于GOPATH/src之外并且本身包含go.mod文件或位于包含go.mod文件的目录下时,才启用模块支持。
在模块感知模式下,GOPATH不再定义构建过程中导入的含义,但它仍然存储已下载的依赖项(在GOPATH/pkg/mod中)和已安装的命令(在GOPATH/bin中,除非设置了GOBIN)。
如果您希望使用位于磁盘上的软件包,请参见如何在另一个模块中使用不在“GOPATH”中的模块?

1
谢谢,我明白了。我是 Go 模块的新手,一直在尝试弄清楚它是如何工作的。 - zooes

3

我曾遇到过这个问题,并在每个项目中使用此设置,解决了我的问题。 enter image description here

但我仍在寻找全局的GO模块配置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接