golang 包继承

以我自己的项目为例,项目的目录结构是这样的:

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、项目的层次结构更加清楚。


你可能感兴趣的:(golang 包继承)