gopl-zh.github.com/ch10/ch10-07-5.md

1.2 KiB
Raw Blame History

10.7.5. 内部包

在Go语音程序中包的封装机制是一个重要的特性。没有导出的标识符只在同一个包内部可以访问而导出的标识符则是面向全宇宙都是可见的。

有时候,一个中间的状态可能也是有用的,对于一小部分信任的包是可见的,但并不是对所有调用者都可见。例如,当我们计划将一个大的包拆分为很多小的更容易维护的子包,但是我们并不想将内部的子包结构也完全暴露出去。同时,我们可能还希望在内部子包之间共享一些通用的处理包,或者我们只是想实验一个新包的还并不稳定的接口,暂时只暴露给一些受限制的用户使用。

为了满足这些需求Go语言的构建工具对包含internal名字的路径段的包导入路径做了特殊处理。这种包叫internal包一个internal包只能被和internal目录有同一个父目录的包所导入。例如net/http/internal/chunked内部包只能被net/http/httputil或net/http包导入但是不能被net/url包导入。不过net/url包却可以导入net/http/httputil包。

net/http
net/http/internal/chunked
net/http/httputil
net/url