我在包 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: cannot run *_test.go files (package_test.go)
但如果我重命名文件为abc.go
,那么我得到正确的输出,即.
Return string from pack1 : Hello world!
Integer from pack1 : 42
我很好奇使用package_test.go
作为文件名有什么问题。对于只有主包的代码,这个名称工作得很好。
这是围棋的bug还是我做错了什么?
4条答案
按热度按时间8aqjt8rx1#
这不是一个bug,它的设计是这样的。
go run
检测_test
文件,并将它们视为一个包的测试文件,测试文件将被编译为一个单独的包,然后与主测试二进制文件链接并运行。建议将您的软件包文件放到
GOPATH/src/PACK_NAME/
中,然后使用go test
运行您的*_test.go
。r8uurelv2#
你不能将你的程序文件命名为
*_test.go
,因为这是集成Go语言testing system的一部分要编写新的测试套件,请创建一个名为ends _test.go的文件,该文件包含此处所述的TestXxx函数。将该文件放在与正在测试的包相同的包中。该文件将从常规包构建中排除,但在运行“go test”命令时将包括在内。有关详细信息,请运行“go help test”和“go help testflag”。
只需将
package_test.go
重命名为packagetest.go
von4xj4u3#
巴斯
运行
go run PATH_TO_FILES/!(*_test).go
注意事项
如果在运行此命令时出现event not found错误,则可能需要在bash终端中启用扩展的globbing。
运行
shopt-s extglob
运行
go run PATH_TO_FILES/!(*_test).go
之后对于使用***ZSH***
setopt extendedglob
#以获取有关全局匹配的帮助下一个
foo*~*bar*
#匹配以foo开头但不包含bar所有内容我的例子是
go run PATH_TO_FILES/*~*_test.go*
p3rjfoxz4#
如果您使用的是Linux:
对我很有效。