Golang:“包ast_test”下划线测试

xge*_*ged 3 go package-name

来自 Golang 标准库的文件

文件的基目录:ast

文件中指定的包:ast_test???

在同一目录内的所有其他文件中指定的包: ast

来自golang.org : src contains Go source files organized into packages (one package per directory)... By convention, packages are given lower case, single-word names; there should be no need for underscores or mixedCaps ...Another convention is that the package name is the base name of its source directory

如何在一个文件夹中包含多个包(此处为 2)?

Von*_*onC 5

您在 中找到了另一个示例src/pkg/go/ast/commentmap_test.go,并附有注释:

// To avoid a cyclic dependency with go/parser, this file is in a separate package.
Run Code Online (Sandbox Code Playgroud)

我想它允许像这样的正交命令:

go test
Run Code Online (Sandbox Code Playgroud)

这将测试解析器功能,同时避免该测试成为相同解析器功能的一部分(因为它已放在单独的包中)

go命令手册页

声明带有后缀“ _test”的包的测试文件将被编译为单独的包,然后与主测试二进制文件链接并运行。


这个线程问了一个问题:

既然该go工具要求每个目录都是一个包,并且不允许在同一文件夹中包含不同包名的文件,那么 package 关键字有什么用呢?这似乎是不必要的重复。

编译器是否需要它,或者是否有计划将其删除?

答案暗示您可以在一个文件夹中拥有多个包:

包声明声明了包的名称。
Go 语言不知道文件或目录是什么,并且导入路径本身不会影响正在导入的包的实际名称。因此,编译器知道如何调用包的唯一方法是包声明。

该语言不需要将单独的包放在单独的目录中;这是go工具的要求。
另一个假设的实现可能没有这个要求。

go由于“ // +build”构建标签,甚至可以绕过这个工具要求。

例如,读取misc/cgo/gmpmisc/cgo/stdio(某些文件包括// +build ignore