description |
---|
包名规则解释 |
Go-Spring 大量使用双字节包名.
原因如下:
- Go 标准库推崇单字节小写包名,这没错,因为在一个封闭的框架里面是没有问题的,但是当文件中引用两个路径不同的相同包名时噩梦就来了,你可能会觉得不是有包别名吗,但是问题也在于此,不同的人、不同的文件在处理包名冲突的时候采取的策略很可能是不一致的。
举个例子,有两个包 /a/b/util 和 /c/d/util,很可能在一个文件里面对第一个 /a/b/util 重命名,而在下一个文件里面可能是对第二个
/c/d/util 重命名,而且很可能第一个文件里面的别名是 util2,而第二个文件里面的重命名是 xx_util,麻烦不就来了吗。
-
Go 标准库的模块几乎都是没有关联的,所以见名知意很容易,但也不是说 Go 标准库里面就没有双字节包名,只是比较少,比如 ioutil、randutil。
-
Go-Spring 是一个很大的业务框架,很多模块都是有关联的,很多模块也不是一个字节就能说清楚的,举个例子,go-spring-web 框架由 web核心、echo实现、gin实现、 echo starter、gin starter 等等多个部分组成,每个部分都使用单字节包名是可能的吗?显然是不可能的。Go-Spring 除了 IoC、Boot 是绝对独立的,其他几乎所有的模块都是封装的三方项目,这时候怎么和原来的项目进行区别,加前缀看起来是个不错的主意。
-
再来讲一下为什么 Go-Spring 要选择首字母大写驼峰式命名,举个例子,spring_boot 和 SpringBoot,哪个更好看呢,你可能觉得都差不多,那么再添点东西,spring_boot.Application 和 SpringBoot.Application 哪个更好看呢?显然是后者。
-
Go-Spring 的主要目标之一是形成一种项目规范,所以即使有一小部分能使用单字节包名,但是为了整体风格的统一,也尽量使用双字节包名,这也是为了避免潜在的包重名问题。