什么是'包的目的是什么?关键字何时可以由编译器推断?

时间:2016-08-12 21:36:08

标签: go packages

目录x中的所有Go源文件都在顶部声明了包名x。我知道这不是强制性的,否则会使事情变得不必要地复杂化。那么为什么go编译器不会从目录名中推断出包名?

这几乎存在于Java或C#等其他语言中,您必须在编译时声明可以轻松计算的内容。

理由是什么?

1 个答案:

答案 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)

这在-中尤为常见,因为您无法在标识符中使用它。