栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

基准测试时go mod报错

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基准测试时go mod报错

记录一个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置空

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909399.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号