Go语言学习笔记九--面向"对象"-拓展已有的类型

如何拓展已有的类?

  • 别名
  • 组合

因为在GO语言中是没有继承的,所以对于拓展已有的类,我们常做的方法是,创建一个私有类,然后我们对需要推展的类,进行包装.

包装我们之前写的tree.Node:

/**
拓展已有的类:

拓展我们自己写的tree.Node
 */

type myTreeNode struct {
    node *tree.Node //最好是指针 因为go特性声明指针 就会传值copy影响性能
}

/**
拓展后续遍历
 */
func (mynode *myTreeNode)postOrder() {
    if mynode==nil || mynode.node==nil{
        return
    }
    right := myTreeNode{mynode.node.Right}
    left:= myTreeNode{mynode.node.Left}
    right.postOrder()
    left.postOrder()
    mynode.node.Print()
}

拓展slice:

package queue

type Queue []interface{} //interface{} 在GO语言中代表,所有类型

func (q *Queue) Push(v interface{}) {

    *q = append(*q, v)
}

func (q *Queue) Pop() (r interface{},ok bool){
    if len(*q)== 0{
        return 0,false
    }
    head := (*q)[0]
    *q = (*q)[1:]
    return head,true
}

func (q *Queue) IsEmpty() bool {
    return len(*q) == 0
}


作者所有的学习源码在 go学习源码github地址,如果觉得有用的话帮小智贡献一个star?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值