go 的internal 目录

internal 特性的官方解释

Go 语言中的软件包推荐按照:组织名/项目名 的形式安排软件包的文件目录结构,一般「项目名」文件目录下还会按照功能、抽象约定、具体实现等维度再划分一些子目录。在 Go 语言里包的导入路径不同则被判定为不同的包。

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

翻译成人话

如上是相对官方的解释(其实我也是从其他地方抄过来的,哈哈)。翻译成人话就是两点

  1. 之前用变量大小写,限制变量是否能导出的方法,不够用了,需要用 internal 来更进一步限制文件目录的导出规则。
  2. internal 只能由父级目录或同级目录引用

看个例子

写一个学校的项目,里面包括老师和学生的信息,目录结构可以建成下面的样子,学生和老师的业务逻辑,分别写在 student/internalteacher/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()
}

posted @   沧海一声笑rush  阅读(1277)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-07-27 C# 中的LINQ
点击右上角即可分享
微信分享提示