执行go build时报错:go: go.mod file not found in current directory or any parent directory

执行go build时报错:go: go.mod file not found in current directory or any parent directory
执行命令go build -n时提示:go: go.mod file not found in current directory or any parent directory; see 'go help modules'

根据提示信息我们可以看出是项目目录下缺少go.mod文件,那么如何才能生成此文件呢?

第一步:开启Go Modules功能

go module是go官方自带的go依赖管理功能,从Go 1.13版本正式推荐使用,它可以将项目下的所有依赖集中到 go.mod 文件,进行集中管理。使用go module管理依赖将会在项目根目录下生成两个文件 go.mod(负责记录当前项目的所有依赖)和go.sum(记录每个依赖库的版本和哈希值)

我们使用如下命令开启go modules功能:

go env -w GO111MODULE=on

GO111MODULE介绍

GO111MODULEgo modules功能的开关:

  • GO111MODULE=off,关闭go modules功能,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
  • GO111MODULE=on,开启go modules功能,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
  • GO111MODULE=auto,默认值,go命令会根据当前目录中是否有go.mod文件来决定是否启用module功能。这种情况下可以分为两种情形:
    1、当项目路径在GOPATH目录外部时, 设置为GO111MODULE = on
    2、当项目路径位于GOPATH内部时,即使存在go.mod, 设置为GO111MODULE = off

第二步:生成go.mod文件

在当前项目目录下,执行如下命令生成go.mod文件:

go mod init [项目文件夹名称]

go mod command

Go Mod相关命令

可以使用go mod help命令进行相关命令和解释查看
go mod命令

go mod init <项目目录名称>   //初始化模块,自动生成go.mod文件

go mod download [path@version]  //下载指定依赖

go mod edit  -json //编辑go.mod文件 可选项有-json、-require和-exclude

go mod graph //以文本模式打印模块需求图

go mod tidy  //删除错误或者不使用的modules

go mod vendor  //将依赖包复制到项目的vendor目录

go mod verify //验证依赖是否正确

go mod why //查找依赖

go list -m all  //显示依赖关系

go list -m -json all //显示完整依赖关系

也可以使用命令go help mod <command>查看mod先关命令使用方法。

参考文档:Go Modules Reference

the end

标签: golang mac