【GoLand】go: cannot find main module;see ‘go help modules‘

一、解决方案

原汁原味的报错信息如下:
【GoLand】go: cannot find main module;see ‘go help modules‘_第1张图片
报错原因是没有使用 go modules 进行模块管理,无法记录和解析对其他模块的依赖性。只需要在项目根目录执行命令 go mod init 即可。

需要注意的是,使用 go modules 需要设置 go 的环境变量 GO111MODULE 的值。

二、相关知识点

GO111MODULE

GO111MODULE 取值有三种:offonauto(默认值)。

  • GO111MODULE=off,无模块支持,从 $GOPATH 和 vendor 文件夹寻找依赖包。
  • GO111MODULE=on,有模块支持,go 会忽略 $GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
  • GO111MODULE=auto,go 命令行将会根据当前目录来决定是否启用 modules 功能。可分为两种情形:
    • 项目在 $GOPATH/src 之外且项目根目录有 go.mod 文件时,开启模块支持;
    • 项目在 $GOPATH/src 内部,即使存在 go.mod 文件,也不提供模块支持。

当模块功能启用时,依赖包的存放位置变更为 $GOPATH/pkg,允许同一个 package 多个版本并存,且多个项目可以共享缓存的 module。

常用命令分享

个人习惯是,在执行项目前,先执行下面两条命令:

$ go get -u
$ go mod tidy

go get -u 命令会利用网络来更新已有代码包及其依赖包。默认情况下,只会下载本地不存在的代码包,而不会更新已有的代码包。
go mod tidy 命令会拉取缺少的模块,移除不用的模块。

参考文章

  1. go mod 使用

  2. golang版本管理工具GO111MODULE

  3. Go 模块解惑:到处都是 GO111MODULE ,这到底什么?

  4. go get

你可能感兴趣的:(Golang,goland,GO,GOLANG)