以我自己的项目为例,项目的目录结构是这样的:
1、我有两个项目,一个项目做为基础项目,里面的方法大都具有通用性。
2、还有一个正在开发的项目,这个项目需要调用基础项目里的很多函数。
现在基础项目里有一个包含所有对数据库进行操作的函数的文件,名叫servicebase.go,包名:db
代码如下:
packaeg db
typeServiceBase struct{
DBE *xorm.Engine
}
在正在开发的项目里我建了一个baseservice.go(包名:base)这个文件,这个文件里面的函数也都具有通用性,它作为一个基础函数库供我当前项目调用,就是说里面的函数不是为了某一个模块设计的,而是在项目中很多模块都需要用到的函数。
现在我让baseservice去继承ServiceBase ,代码如下:
package base
typeBaseService struct{
ServiceBase
}
这样一来,baseservice就继承了ServiceBase 包里面的函数,当你取得了指向BaseService的指针的时候,就可以通过指针调用ServiceBase 和BaseService里面的函数了。
这不是重点,重点是这个项目的其他模块的service也应该来继承BaseService ,代码如下:
package foodsafety
typeFoodSafetyService struct{
BaseService
} 那么为什么要这样做呢?因为其他模块如果继承了baseservice,就同时继承了servicebase,指向foodsafetyservice这个结构体的指针就可以 同时调用servicebase、baseservice和foodsafetyservice这三个模块里的函数。 注意:如果这三个文件里有同名的函数,用指向foodsafetyservice的指针调用这个同名函数的时候,系统会调用foodsafetyservice这个文件里的函数,这就和面向对象 中的函数重写一样。
那又有人要问了,就算是这样那又怎么样呢?
这样做有以下几个好处:
1、如果你的foodsafetyservice包含的是servicebase,那么当你需要调用当前项目某个公共函数的时候,是不是需要取得指向baseservice的指针,然后再用这个指针去
调用公共函数。但是如果你的foodsafetyservice包含的是baseservice,这一步就可以省略了,这在一定程度上可以简化程序的代码。2、项目的层次结构更加清楚。
有疑问加站长微信联系(非本文作者)