• 扩展已有类型


    扩展已有类型

    go没有继承,如果对别人的类型或系统类型扩展方法,两种方法

    1. 使用组合
    2. 定义别名

    使用组合

    package main
    
    import (
    	"fmt"
    	"gin/tree"
    )
    
    
    type MyTreeNode struct {
    	node *tree.Node
    }
    
    func (myNode *MyTreeNode) postOrder() {
    	if myNode == nil || myNode.node == nil{
    		return
    	}
    	Left := MyTreeNode{myNode.node.Left}
    	Right := MyTreeNode{myNode.node.Right}
    	Left.postOrder()
    	Right.postOrder()
    	myNode.node.Print()
    
    }
    
    
    
    func main() {
    
    	var root tree.Node
    
    	root = tree.Node{Value:3}
    
    	root.Left = &tree.Node{} // 0
    	root.Right = &tree.Node{5,nil,nil}
    
    	root.Right.Left = new(tree.Node)
    
    	root.Right.Right = tree.CreateNode(23)
    
    	root.Traverse()
    	fmt.Println()
    	myRoot := MyTreeNode{&root}
    	myRoot.postOrder()
    
    }
    

    使用别名

    queue.go

    package queue
    
    type Queue []int
    
    func (q *Queue) Push(v int)  {
    	*q = append(*q,v)  //这里虽然传递的是一个地址 但是这样是可以改变其值的
    }
    
    func (q *Queue) Pop() int  {
    
    	head := (*q)[0]
    
    	*q = (*q)[1:]
    
    	return head
    
    }
    
    func (q *Queue) IsEmpty() bool  {
    	return len(*q) == 0
    }
    
    
    

    entry.go

    package main
    
    import (
    	"fmt"
    	"gin/queue"
    )
    
    func main() {
    
    	q := queue.Queue{1}
    
    	q.Push(2)
    	q.Push(3)
    
    	fmt.Println(q.Pop())
    	fmt.Println(q.Pop())
    
    	fmt.Println(q.IsEmpty())
    
    	fmt.Println(q.Pop())
    
    	fmt.Println(q.IsEmpty())
    }
    
    
  • 相关阅读:
    stm32的hal之串口库函数总结复习
    关闭win10 任务栏窗口预览的步骤:
    sizeof的注意点
    goto语句——慎用,但是可以用
    #define的一个小技巧
    Chapter 1 First Sight——36
    Chapter 1 First Sight——35
    Chapter 1 First Sight——34
    leetcode409
    Chapter 1 First Sight——34
  • 原文地址:https://www.cnblogs.com/webclz/p/14019250.html
Copyright © 2020-2023  润新知