我在包 pack1 下有以下代码。文件名是 pack1.go
package pack1
var Pack1Int int = 42
var pack1Float = 3.14
func ReturnStr() string {
return "Hello world!"
}
以及主程序中的以下代码。文件名是 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)
}
当我尝试使用命令 go run package_test.go
运行它时,出现以下错误:
go run: 无法运行 *_test.go 文件 (package_test.go)
但是如果我将文件重命名为 abc.go
那么我会得到正确的输出即
Return string from pack1 : Hello world!
Integer from pack1 : 42
我很好奇使用 package_test.go
作为文件名有什么问题。
对于只有主包的代码,这个名称工作正常。
这是 Go 中的错误还是我做错了什么?
最佳答案
不是错误,它就是这样设计的。 go run
检测 _test
文件并将它们视为包的测试文件,测试文件将作为单独的包编译,然后与主测试二进制文件链接并运行.
建议将你的包文件放到GOPATH/src/PACK_NAME/
,然后用go test
运行你的*_test.go
。
关于unit-testing - 不运行名称为 package_test.go 的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35099417/