Searching...

[TOC]

包名约定

根据官方《Effective Go》建议,包名尽量采用言简意赅的名称(short, concise, evocative)。并且推荐通过不同的import路径来区分相同包名的包引入。

包名冲突

这是使用Go语言开发项目往往会遇到的问题。该示例同样也展示了使用GF框架开发项目时如何避免包名冲突。

在本示例中,控制器、业务逻辑及数据模型中均存在user包名,因此假如在同一个go文件中引入时会存在包名冲突的问题。如果从Go语言语法角度来看的话,可以通过给某个包设置别名的方式解决。但在本示例中,不会出现包名冲突的问题,因为该示例严格遵守了设计模式:

  1. 控制器api只会调用service,不会出现直接调用model的情况。

  2. 逻辑层service中可以调用其他service,也可以调用数据层model。但是禁止调用api,并且注意循环依赖问题。

  3. 数据层model中可以调用其他model。但是禁止调用serviceapi

常见的问题是在控制器api既调用了service也调用了model,往往需要通过别名的方式来解决。这种不严格遵守设计模式的方式是不推荐的,撸码一时爽,维护火葬场。在多人协作的项目管理中,是禁止的。

“包名冲突”这样的问题往往为设计模式形成了一种潜在的约束。