如何拓展已有的类?
- 别名
- 组合
因为在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😁