go语言使用内嵌结构体达到c++派生继承的效果

go语言里没有类的概念,不过有结构体这样的语法,也可以当做类来使用,并在结构体中定义方法,最终达到c++语言中派生和继承的效果。

具体是在结构体里内嵌其他结构体,当做从基类派生一样,可以继承使用基类的方法。比如:

type Books struct {//定义一个基类结构体Books
   title string
   id int
}

func (bk Books) m_Get () (string,int) {//这里是获取结构体变量的成员值,返回多个值。因为是只读取操作,所以传递值即可。
    return bk.title,bk.id
}
type EngBooks struct {//定义一个派生类结构体
    Books //内嵌一个结构体,相当于是从基类Books派生出子类
    grad int
}

func main() {

    bk1:=Books{"haha",1}//第一种初始化方法,是通过列表形式依次赋值每个成员

    bk2:=Books{title:"haha"}//第二种初始化方法,是通过成员名:具体值形式,这种可以只定义其中某个值,不用全部定义。

    bk3:=Books{}//第三种方法,直接一个大括号{},表示创建一个空结构体对象,所有成员都是默认值。

    var bk4 Books//第四种初始化方法,是先声明一个结构体成员,

    bk4.title="haha"//然后再通过.成员名依次初始化

    bk5:=new(Books)//第五种方法,直接用new创建一个结构体指针,new函数参数里只需传递类型名即可

   

    //对应的派生类结构体初始化,也是可以上边五种方法,只是因为内嵌有基类,所以稍微有点变化

    //egbk:=EngBooks{Books{"haha",1},2} //对应上边基类的第一种初始化方法
    egbk:=EngBooks{Books:Books{id:10}}//对应上边第二种,冒号:左边的Books是派生类的成员名,右边的Books{id:10}就是具体的值,定义形式参考上边基类的前三种初始化方法
    //后面三种初始化方法跟上边基类的一样,这里不再赘述。

    //因为派生类里内嵌有基类,所以可以直接调用基类的方法。
    tstr,tid:=egbk.m_Get()
    fmt.Printf("调用基类的方法m_Get:%s-%d\n",tstr,tid)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值