go不运行名为package_test.go的程序

k75qkfdt  于 2022-12-07  发布在  Go
关注(0)|答案(4)|浏览(176)

我在包 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还是我做错了什么?

8aqjt8rx

8aqjt8rx1#

这不是一个bug,它的设计是这样的。go run检测_test文件,并将它们视为一个包的测试文件,测试文件将被编译为一个单独的包,然后与主测试二进制文件链接并运行。
建议将您的软件包文件放到GOPATH/src/PACK_NAME/中,然后使用go test运行您的*_test.go

r8uurelv

r8uurelv2#

你不能将你的程序文件命名为*_test.go,因为这是集成Go语言testing system的一部分
要编写新的测试套件,请创建一个名为ends _test.go的文件,该文件包含此处所述的TestXxx函数。将该文件放在与正在测试的包相同的包中。该文件将从常规包构建中排除,但在运行“go test”命令时将包括在内。有关详细信息,请运行“go help test”和“go help testflag”。
只需将package_test.go重命名为packagetest.go

von4xj4u

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*

p3rjfoxz

p3rjfoxz4#

如果您使用的是Linux:

go run `ls PATH_TO_FILES/*.go | grep -v _test.go`

对我很有效。

相关问题