golang 包继承

niechaoya · · 2459 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:niechaoya

查看原文:golang 包继承

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2459 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传