5.1.3. 使用 internal
包来减少公共API
如果项目包含多个包,可能有一些公共的函数,这些函数旨在供项目中的其他包使用,但不打算成为项目的公共API的一部分。 如果你发现是这种情况,那么 go tool
会识别一个特殊的文件夹名称 - 而非包名称 - internal/
可用于放置对项目公开的代码,但对其他项目是私有的。
要创建此类包,请将其放在名为 internal/
的目录中,或者放在名为 internal/
的目录的子目录中。 当 go
命令在其路径中看到导入包含 internal
的包时,它会验证执行导入的包是否位于 internal
目录。
例如,.../a/b/c/internal/d/e/f
的包只能通过以 .../a/b/c/
为根目录的代码被导入。 它无法通过 .../a/b/g
或任何其他仓库中的代码导入。[5]