为了账号安全,请及时绑定邮箱和手机立即绑定

undefined main - 测试代码无法访问主包

undefined main - 测试代码无法访问主包

Go
手掌心 2022-06-13 17:08:24
在下面的代码中:../folder1/some_test.gopackage main_testimport "testing"func TestF(t *testing.T) {    main.F()}../folder1/some_file.gopackage mainfunc F() {}main.F()给undefined main$ go versiongo version go1.14.3 linux/amd64重命名包名称main_test以main解决问题。为什么main_test不允许在同一文件夹中测试代码的包名称?
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您必须导入包才能使用该包。


去.mod:


module example.app

main.go:


package main


func F() {}


func main() {}

main_test.go


package main_test


import (

    "testing"

    "example.app"  // import the main package

)


func TestF(t *testing.T) {

    main.F()

}

上面的代码假设 main*.go 与 go.mod 的 package 位于同一目录中example.app。替换example.app为您的模块的名称。调整路径以匹配您的应用程序。例如,如果 main*.go 文件位于cmd/example包含 go.mod 的目录下的目录中,则使用导入路径example.app/cmd/example而不是example.app.


请注意,测试可以通过这种方式导入主包,但非测试代码不能。


查看完整回答
反对 回复 2022-06-13
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

问题是它main_test与main.


要访问其中的函数,main您需要main像这样导入和访问函数:main.F()


此外, notef以小写字母开头,因此不会从 package 中导出main。要在其中访问它,main_test需要将其导出(可以通过将其更改为以大写字母开头来完成:F)。


或者,您可以将测试文件更改为在 package 中main。


使用注释编辑:导入时main请注意导入路径按目录名称。通常,Go 中的开发人员将他们的包放在与包同名的目录中(例如,放在main名为 的目录中main)。在您的情况下,包和目录名称不同,因此导入将import ".../folder1"不是import ".../main". 您仍然可以使用main.F()来访问该功能:


package main_test


import (

   "testing"

   "../folder1" // use the full path to folder1 from the root of your module

)


func TestF(t *testing.T) {

    main.F()

}


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信