Golang 默认暴露项目下所有的包目录给外部使用,如果有的包需要只供当前包使用,则可以将其放入 internal 目录。
以下面的项目结构为例:
// 带internal的Go库项目结构
$tree -F ./chapter2/sources/GoLibProj
GoLibProj
├── LICENSE
├── Makefile
├── README.md
├── go.mod
├── internal/
│ ├── ilib1/
│ └── ilib2/
├── lib.go
├── lib1/
│ └── lib1.go
└── lib2/
└── lib2.go
ilib1
, ilib2
包可以被当前项目的其他包 lib.go
, lib1
, lib2
引用,但不能其他引用 GoLibProj
的项目引用。
Info
internal 不止仅仅可以存在与项目的根目录,也可以放入任何的子目录中,其引用范围也会相应缩小。