internal
之前没注意这个包名的特殊意义,只知道是内部,但是没想到Go直接将这个命名的包设置为模块级私有访问权限,之前项目中proto生成的.pb.go都放在internal包里,我试图在其他项目引入,一直失败,报错use of internal package xxx not allowed。
查了一下原来是在 Go 1.5
及后续版本中,可以通过创建 internal
代码包让一些程序实体仅仅能被当前模块中的其他代码引用。这是第三种访问权限:模块级私有。一个 Go
项目里的 internal
目录下的 Go
包,只可以被本项目内部的包导入。项目外部是无法导入这个 internal
目录下面的包的。
.
├── module1
│ ├── go.mod
│ ├── internal
│ │ └── pkga
│ ├── pkg1
│ └── pkg2
└── module2
├── go.mod
└── pkg1
module1
中的 internal/pkga
包可以被 module1
的 pkg1
和 pkg2
包所导入。但无法被 module2
的pkg1
包所导入。
ref:internal 包的使用规则