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

    技术2024-12-10  12

    一、解决方案

    原汁原味的报错信息如下: 报错原因是没有使用 go modules 进行模块管理,无法记录和解析对其他模块的依赖性。只需要在项目根目录执行命令 go mod init 即可。

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

    二、相关知识点

    GO111MODULE

    GO111MODULE 取值有三种:off,on 和 auto(默认值)。

    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 命令会拉取缺少的模块,移除不用的模块。

    参考文章

    go mod 使用

    golang版本管理工具GO111MODULE

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

    go get

    Processed: 0.057, SQL: 9