go 的internal 目录
internal 特性的官方解释
Go 语言中的软件包推荐按照:组织名/项目名 的形式安排软件包的文件目录结构,一般「项目名」文件目录下还会按照功能、抽象约定、具体实现等维度再划分一些子目录。在 Go 语言里包的导入路径不同则被判定为不同的包。
Go语言1.4版本后增加了 Internal packages 特征用于控制包的导入,即internal package只能被特定的包导入。
内部包的规范约定:导入路径包含internal关键字的包,只允许internal的父级目录及父级目录的子包导入,其它包无法导入。
翻译成人话
如上是相对官方的解释(其实我也是从其他地方抄过来的,哈哈)。翻译成人话就是两点
- 之前用变量大小写,限制变量是否能导出的方法,不够用了,需要用
internal
来更进一步限制文件目录的导出规则。 internal
只能由父级目录或同级目录引用
看个例子
写一个学校的项目,里面包括老师和学生的信息,目录结构可以建成下面的样子,学生和老师的业务逻辑,分别写在 student/internal
和 teacher/internal
中,
复制.
├── go.mod
├── main.go
├── student
│ ├── internal
│ │ └── studentInfo.go
│ └── service.go
└── teacher
├── internal
│ └── teacherInfo.go
└── service.go
这样写,就能使学生
和老师
之间的代码不能相互引用(main.go 也不能直接引用),做到代码隔离。所有学生的业务逻辑统一通过 student/service.go
对外暴露,老师业务逻辑同理。
其中 main.go
中的代码如下所示
import (
"school_demo/student"
"school_demo/teacher"
)
func main() {
student.Service()
teacher.Service()
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-07-27 C# 中的LINQ