基准测试时go mod报错

基准测试时go mod报错,第1张

记录一个go语言测试时遇到的问题

问题描述

在windows机器里GOPATH路径下有一个的demo包下有一个demo_test.go的测试文件,里面包含一个单元测试函数和一个基准测试函数,此时使用go test -v demo_test.go测试能正常进行,但使用go test -bench=.做基准测试时却有如下报错,

go: go.mod file not found in current directory or any parent directory; see 'go help modules'

但同样的代码以及同样的GOPATH路径,在linux系统下时却能完全正常的运行

解决思路

首先看报错提示,报找不到go.mod文件。就查看了一下go module的相关信息,官方定义go module是相关Go包的集合,是源代码交换和版本控制的单元go命令直接支持使用模块, 包括记录和解析对其他模块的依赖关系。模块取代了旧的基于gopath的方法来指定,在给定的构建中使用哪些源文件。
个人理解的就是go module可以让代码找包、解决依赖或其他模块时,不仅仅拘泥于GOPATH路径,就是一个包管理工具
了解到这个之后很快便定位到问题所在了,既然报找不到go.mod,那么为什么它会去找go.mod呢?
通过go env查看了go的配置文件 ,发现linux系统下GO111MODULE的值与windows下的不一样linux下为auto,windows下为on,再结合以下GO111MODULE值的含义,go test -bench=. 失败的原因就一目了然了,此时有两个解决办法,一是直接通过go env -w GO111MODULE=auto 将go module改为默认值,二是在当前目录下执行go mod init 新建一个go.mod文件

GO111MODULE 有三个值:off, on和auto(默认值)。
GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
当前目录在GOPATH/src之外且该目录包含go.mod文件
当前文件在包含go.mod文件的目录下面。
当modules功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module。

补充

在go mod init时可能会遇到如下问题
一、

$ go mod init
go: cannot determine module path for source directory /root/test (outside GOPATH, module path must be specified)

Example usage:
	'go mod init example.com/m' to initialize a v0 or v1 module
	'go mod init example.com/m/v2' to initialize a v2 module

Run 'go help mod init' for more information.

解决方法:init后面应该加上模块的名字

$ go mod init example
go: creating new go.mod: module example
go: to add module requirements and sums:
	go mod tidy

二、

$ go mod init
go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'
$ go mod init bitcoin
go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

解决方法:不要在GOPATH路径下执行该命令。或者换个路径,或者把环境变量中的GOPATH置空

如有错误,欢迎指正,感谢!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/995962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存