【问题标题】:What does Enable Go modules integration do in Intellij IDE在 Intellij IDE 中启用 Go 模块集成有什么作用
【发布时间】:2021-08-16 18:52:45
【问题描述】:

以前没有关于在终端中从零开始创建项目的知识,我创建了一个文件夹,cd 进入它然后运行go mod init my_project_name,它为我创建了一个 go.mod 文件,然后我创建了 main.go构建好的文件。

然后我创建了一个文件夹并在其中添加了一个带有包名的 go 文件(与目录相同)并在其中创建一个结构。接下来我尝试在主包中导入该包,但是当我尝试在终端上构建时,它给了我这个错误

go: cannot determine module path for source directory /Users/berkcan/workspace/go/my_project_name (outside GOPATH, module path must be specified)

在谷歌搜索后无法找到解决问题的方法,我已将项目导入心爱的 Intellij IDE 并启用 Go 模块集成,然后一切正常。首先,我认为 IDE 在构建项目时会在内部发挥一些作用,但即使我在终端中尝试 go build 命令,它也会构建。但我看不到项目结构的差异或 go.mod 文件中的新行。

那么发生了什么,当我勾选 go module integration 框时 Intellij IDE 做了什么,我可以在没有 Intellij IDE 的终端上启用它?

here is the photo of option in IDE when ticked

【问题讨论】:

    标签: go intellij-idea


    【解决方案1】:

    IntelliJ IDEA plus Go plugin 或 GoLand under the hood 有两种模式来获取关于你的包的信息(简化):

    • GOPATH。 IDEA 会扫描您的 $GOPATH 目录以构建包的内部索引并提供代码完成、解析等。
    • Go 模块。 IDEA 执行go list -m -json 来解决您的依赖关系并扫描您的$GOPATH/pkg/mod 目录(默认值为GOMODCACHE)以查找包。如果它们不存在,IDEA 将执行go mod download。完成这些操作后,IDE 会提供所有内置功能,如代码完成、导航等。

    这两种模式都不会更改您的 Go 或环境变量以及终端中的行为。当您在设置中选中 Enable Go Modules integration 选项时,IDE 只需将模式从扫描 $GOPATH 切换为执行 go list 并从 Go Modules 缓存中解析您的依赖项。

    总而言之,IntelliJ IDEA 没有任何魔法。我想它与您在终端内的自定义 Go 环境变量有关,尤其是 GO111MODULE,如果您没有将这些变量传递给 GUI 应用程序(例如,您已在 .zshrc 文件中指定它并通过桌面条目运行 IDE终端),IntelliJ IDEA 不会继承它们。您可以比较本地终端内的 go env 输出和 IDE 内的内置输出(查看 | 工具窗口 | 终端)并找出差异。

    【讨论】:

    • 知道了,当我比较两个终端时,IDE 终端有 GO111MODULE="on" 而在我的终端中它是 GO111MODULE="" 但我仍然可以在我的终端上构建,而这仍然是我不应该的错误当 go111module 看起来是空的时,我无法在我的终端上构建
    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2020-06-30
    相关资源
    最近更新 更多