我在包pack1下有以下代码。文件名是pack1.go
package pack1
var Pack1Int int = 42
var pack1Float = 3.14
func ReturnStr() string {
return "Hello world!"
}
Run Code Online (Sandbox Code Playgroud)
并在主程序中遵循以下代码。文件名是package_test.go
package main
import (
"fmt"
"./pack1"
)
func main() {
var test1 string
test1 = pack1.ReturnStr()
fmt.Printf("Return string from pack1 : %s\n", test1)
fmt.Printf("Integer from pack1 : %d\n", pack1.Pack1Int)
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用命令运行它时,出现go run package_test.go以下错误:
go run: cannot run *_test.go files (package_test.go)
但是,如果我将文件重命名为,abc.go那么我将获得正确的输出,即
Return string from pack1 : Hello world!
Integer from pack1 : 42
Run Code Online (Sandbox Code Playgroud)
我很好奇使用package_test.go文件名有什么问题。对于只有主软件包的代码,此名称可以正常工作。
这是Go中的错误,还是我做错了什么?
不是错误,它是这样设计的。go run检测到_test文件并将其视为程序包的测试文件,测试文件将被编译为单独的程序包,然后与主测试二进制文件链接并运行。
我们建议把你的包文件GOPATH/src/PACK_NAME/,然后运行你的*_test.go用go test。