3

来自 Golang 的 stdlib 的文件

文件的基目录: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 个)?

4

1 回答 1

5

您可以在 中找到另一个示例src/pkg/go/ast/commentmap_test.go,并带有以下注释:

// To avoid a cyclic dependency with go/parser, this file is in a separate package.

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

go test

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

go命令手册页

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


这个线程问了一个问题:

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

它是编译器要求的还是有计划删除它?

答案暗示了一个文件夹中可以有多个包的事实:

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

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

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

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

于 2014-07-14T07:31:07.913 回答