包名约定
根据官方《Effective Go》建议,包名尽量采用言简意赅的名称(short, concise, evocative
)。并且推荐通过不同的import
路径来区分相同包名的包引入。
包名冲突
在本示例中,控制器、业务逻辑及数据模型中均存在user
包名,因此假如在同一个go
文件中引入时会存在包名冲突的问题。如果从Go
语言语法角度来看的话,可以通过给某个包设置别名的方式解决。但在本示例中,不会出现包名冲突的问题,因为该示例严格遵守了设计模式:
控制器
api
只会调用service
,不会出现直接调用model
的情况。逻辑层
service
中可以调用其他service
,也可以调用数据层model
。但是禁止调用api
,并且注意循环依赖问题。数据层
model
中可以调用其他model
。但是禁止调用service
及api
。
常见的问题是在控制器api
既调用了service
也调用了model
,往往需要通过别名的方式来解决。这种不严格遵守设计模式的方式是不推荐的,撸码一时爽,维护火葬场。在多人协作的项目管理中,是禁止的。
“包名冲突”这样的问题往往为设计模式形成了一种潜在的约束。
最后编辑: kuteng 文档更新时间: 2021-01-09 18:11 作者:kuteng