1.报错背景

golang版本19。若未初始化mod,执行go build时,会报以下错误:

go: go.mod file not found in current directory or any parent directory

2.错误原因

目录下缺少go.mod文件。

3.解决方案

3.1确保GO111MODULE是on或默认

GO111MODULE是go modules功能的开关:

GO111MODULE=off,关闭go。

modules功能,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。

GO111MODULE=on,开启go modules功能,go命令行会使用modules,而一点也不会去GOPATH目录下查找。

GO111MODULE=auto,默认值,go命令会根据当前目录中是否有go.mod文件来决定是否启用module功能。这种情况下可以分为两种情形:

当项目路径在GOPATH目录外部时, 设置为GO111MODULE = on

当项目路径位于GOPATH内部时,即使存在go.mod, 设置为GO111MODULE = off

3.2生成go.mod

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

go mod init <项目文件夹名称>

3.3再生成go build

3.4go mod其它命令

go mod help命令进行相关命令和解释查看。

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 //显示完整依赖关系

4.总结

若未使用go:embed,生成的可执行文件,仍要与其他静态文件(若有css、javaScript、txt等)放在一起运行。

若使用go:embed,可将其他静态文件一同打包,统一一个可执行文件。详细在这,go:embed