Go 严格的包可见性规则旨在保持 API 表面定义明确且独特。然而,当项目增长时,不可能将实现细节封装在较小的包中而不将其暴露给外部消费者。
Go 1.4 中提出了解决这一困境的一个解决方案:引入“内部”包。
“内部”包只能由同一树中的其他包导入。此规则旨在在公共包和内部包之间创建明确的分离,防止内部实现细节的意外暴露。
尝试从其父树外部导入内部包会导致错误:
import ( "runtime/internal/atomic" "runtime/internal/sys" )
错误:
导入运行时/内部/原子:不使用内部包允许
在主包中使用内部函数的问题源于保持实现细节隔离的愿望。不幸的是,这不是内部包的预期用例。
将实现细节封装在内部包中在 Go 中是不切实际的。相反,请考虑将代码库重构为具有明确定义的公共接口的不同模块。这种方法与 Go 强调清晰的 API 边界相一致,并提高了代码的可维护性和可扩展性。
以上是Go的内部包能真正封装实现细节吗?的详细内容。更多信息请关注PHP中文网其他相关文章!