Go语言1.4版本增加了Internal packages特征用于控制包的导入,即internal package只能被特定的包导入。
内部包的规范约定:导出路径包含internal关键字的包,只允许internal的父级目录及父级目录的子包导入,其它包无法导入。

示例

.
|— checker
| |— internal
| | |— cpu
| | | -- cpu.go<br />| |— ram
| | -- ram.go<br />|— server.go
|— go.mod
|— go.sum
`— main.go

如上包结构的程序,checker/internal/cpu和checker/internal/ram只能被checker包及其子包中的代码导入,不能被main.go导入。当在main.go中导入并调用其函数,编译期会报如下错误:
$ go build
main.go:10:2: use of internal package app/testing/checker/internal/cpu not allowed