如何拓展已有的类?
- 别名
- 组合
因为在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?
本文详细介绍了在Go语言中如何通过组合而非继承来拓展已有类的方法。以自定义的tree.Node为例,展示了如何创建新的myTreeNode结构体来包装并拓展原有功能,同时提供了拓展slice的具体实现,包括Push、Pop和IsEmpty等方法。

被折叠的 条评论
为什么被折叠?



