首页 > 其他分享 >go test main包报错

go test main包报错

时间:2023-04-15 23:16:15浏览次数:38  
标签:包名 test 报错 go import main

前言

先提出问题, 再说明原因. 有如下一段代码:

image-20230415221357951

当执行go test测试时, 会报如下错误:

main.test
/var/folders/55/47pl3jxx6rg7m0r6xvn4f7wr0000gn/T/go-build2769402238/b001/_testmain.go:13:8: could not import main (cannot import "main")
FAIL main [build failed]

什么意思? 导入main包失败? Why?

经过我的测试, 有如下方法解决这个问题:

  1. 换个包名, 只要包名不是main就没问题 (要带着go.modmodule 一起改, 否则路径找不到)
  2. demo.go文件放到子目录下. 只要文件不在根目录就没问题

综上, 只有对根目录的main包方法执行test时会报错.

探究

为什么会发生这样的事情呢? 为了了解原因, 执行go test -work命令可以在执行后保留生成的_testmain.go文件.

这个生成的测试文件开头几行是这样的:

// Code generated by 'go test'. DO NOT EDIT.

package main

import (
	"os"
	"testing"
	"testing/internal/testdeps"
	_test "main"
)

而根据报错信息, 是因为_test "main"这行导致的报错. 这又是什么原因呢?

相信聪明的你一眼就看出原因了, 这个生成的test文件, 包名就是main (因为Go的可执行文件必须是main包), 而在main包中引入main包, 自然是不行的, 自己引入自己怎么行呢.

这也就解释了上面在测试时的解决方案为什么可行:

  1. 换包名: import _test "demo"
  2. 换路径: import _test "main/demo"

只要换个名字或用路径将2个包进行区分, 即可正确导入. (主要还是main这个包作为运行包比较特殊啦)


最后, 这个小问题写出来其实没多少东西, 但我在排查的时候还是稍微费了一些功夫的. 简单看看就好

标签:包名,test,报错,go,import,main
From: https://www.cnblogs.com/hujingnb/p/17322191.html

相关文章

  • 【web 开发基础】PHP 中的goto语句的使用 -PHP 快速入门 (23)
    前言在所有的开发语言中不是都能使用goto语句,因为对goto的应用一直有争议。很多编程goto也只是作为保留关键字,比如java。支持goto的人认为goto语句使用起来比较灵活,而且有些情形能提高程序的效率。如果完全删去goto语句,有些情形反而会使程序变得过于复杂,增加一些不必要的计算量。......
  • 提高查询效率,掌握MongoDB 4.2索引策略中的Measure Index Use技术
    1.使用$indexStats获取索引访问信息使用$indexStats聚合阶段获取有关集合的每个索引的使用情况的统计信息。例如,以下聚合操作返回有关orders集合上索引使用的统计信息:db.orders.aggregate([{$indexStats:{}}])版本3.2中的新功能。返回有关集合的每个索引的使用的统计信息......
  • Django练手小项目1:云笔记
    Django练手小项目1:云笔记1、创建项目专业版pycharm:新建项目->Django->路径下加上项目名python环境:manage.pystartproject项目名2、创建数据库,设计表结构3、新建应用专业版:点击:tools->运行manage.py->startapp应用名4、注册应用5、配置数据库6、更......
  • 编写你的第一个 Django 应用程序,第1部分
    让我们通过示例来学习。在本教程中,我们将引导您完成基本投票应用程序它将由两部分组成:一个公共网站,允许人们查看投票并在其中投票。允许您添加、更改和删除投票的管理网站。一、开发环境搭建第一步当然就是安装python,网上教程太多了,不再赘述。第二步当然就是安装django......
  • ESP3D ESP32-C3 bulid时报错 'Serial2' was not declared in this scope
    ESP3D版本: 3.0.0-alpha3 错误原因: ESP32-C3只有两个port 解决方法一: github上最新的git已经解决了该问题,使用git获取最新版,不要下载Release的 解决方法二: 去掉Serial2serial_sevice.cpp中,  第40,41行将MAX_SERIAL的值......
  • centos7 无法启动 修复​​Internal error XFS_WANT_CORRUPTED_GOTO​报错
    InternalerrorXFS_WANT_CORRUPTED_GOTO错误前面括号中的就是磁盘名称,比如我的就是dm-0修复完reboot重启就能进系统了......
  • mongoDB 4.2:赋能未来数据应用的智慧之选
    mongoDB是在2019年发布,具体特性如下图:1.FullTextSearchMongoDB4.2之前,全文搜索(FullTextSearch)的能力是靠TextIndex来支持的,在MongoDB-4.2里,MongoDB直接与Lucene等引擎整合,在Atlas服务里提供全文建索的能力。2.MongoDBFTS原理1.用户可以在Atlas上,对集合开启全......
  • 通过nginx proxy manager解决https站点访问http接口资源报错问题
    浏览器控制台报MixedContent:Thepageat'<URL>'wasloadedoverHTTPS,butrequestedaninsecureXMLHttpRequestendpoint'<URL>'.Thisrequesthasbeenblocked;thecontentmustbeservedoverHTTPS.这说明你的网站部署上服务器已经启用了ssl证书默认......
  • AtCoder Beginner Contest 223(D,E,F)
    AtCoderBeginnerContest223(D,E,F)D(拓扑排序)D大意就是有\(n\)个点,\(m\)个关系,其中关系是指\(u\)和\(v\),在排序里面使得\(u\)的位置再\(v\)的位置的前面要求找到一个排序满足上述条件的序列中字典序最小的那一个这个使用拓扑排序,并加上优先队列即可只要找到\(n\)个数,即为......
  • mongoDB 3.0 安全权限访问
    mongoDB3.0访问控制改了很多,需要你老老实实的去看文档去验证,谷歌百度出来的多半就是错误的。还需要注意这个参数authenticationMechanisms。为了兼用2.6版本,我直接指定下面的参数:setParameter:authenticationMechanisms:MONGODB-CR下面看看如何创建访问控制权限不使用—aut......