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 不止仅仅可以存在与项目的根目录,也可以放入任何的子目录中,其引用范围也会相应缩小。