目录x
中的所有Go源文件都在顶部声明了包名x
。我知道这不是强制性的,否则会使事情变得不必要地复杂化。那么为什么go编译器不会从目录名中推断出包名?
这几乎存在于Java或C#等其他语言中,您必须在编译时声明可以轻松计算的内容。
理由是什么?
答案 0 :(得分:5)
如果没有package
,您将无法区分主程序和库。
此外,根据language specification,该语言不需要包与目录相同:
实现可能要求程序包的所有源文件都位于同一目录中。
实际上,某些软件包的名称与导入路径不同:
如果省略PackageName,则默认为导入包的package子句中指定的标识符。
考虑github.com/google/go-gcm,其文件中包含package gcm
。使用此库的项目将包含:
import "github.com/google/go-gcm"
然后拨打这样的话:
res, err := gcm.SendHttp(APIKey, notification)
这在-
中尤为常见,因为您无法在标识符中使用它。