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

在下面的代码中:


../folder1/some_test.go

package main_test


import "testing"


func TestF(t *testing.T) {

    main.F()

}

../folder1/some_file.go

package main


func F() {


}

main.F()给undefined main


$ go version

go version go1.14.3 linux/amd64

重命名包名称main_test以main解决问题。


为什么main_test不允许在同一文件夹中测试代码的包名称?


手掌心
浏览 147回答 2
2回答

ABOUTYOU

您必须导入包才能使用该包。去.mod:module example.appmain.go:package mainfunc F() {}func main() {}main_test.gopackage main_testimport (    "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.请注意,测试可以通过这种方式导入主包,但非测试代码不能。

繁星淼淼

问题是它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_testimport (   "testing"   "../folder1" // use the full path to folder1 from the root of your module)func TestF(t *testing.T) {    main.F()}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go