GOLANG 封装与扩展

panzhongke · 2020-04-04 22:45:25 · 843 次点击 · 预计阅读时间 2 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2020-04-04 22:45:25 的文章,其中的信息可能已经有所发展或是发生改变。

封装

type TreeNode struct {
    Left, Right *TreeNode
    Value       int
}

//值接收者和指针接收者和传参数类型没有什么区别
//如果要改变内容或内容比较大,建议用值接收者
func (root *TreeNode) traverse() {
    if root == nil {
        return
    }
    root.Left.traverse()
    fmt.Print(root.Value, " ")
    root.Right.traverse()
}

func createTreeNode(v int) *TreeNode {
    return &TreeNode{Value: v}
}

func main() {
    var root TreeNode
    root = TreeNode{Value: 3}
    root.Left = createTreeNode(4)
    root.Right = &TreeNode{Value: 5}
    root.Left.Right = createTreeNode(2)
    root.Right.Left = createTreeNode(8)
    root.traverse()
}

扩展已有类型

type TreeNode struct {
    Left, Right *TreeNode
    Value       int
}

//值接收者和指针接收者和传参数类型没有什么区别
//如果要改变内容或内容比较大,建议用值接收者
func (root *TreeNode) traverse() {
    if root == nil {
        return
    }
    root.Left.traverse()
    root.print()
    root.Right.traverse()
}
func (root *TreeNode) print() {
    fmt.Print(root.Value, " ")
}

type myTreeNode struct {
    node *TreeNode
}

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 createTreeNode(v int) *TreeNode {
    return &TreeNode{Value: v}
}

func main() {
    var root TreeNode
    root = TreeNode{Value: 3}
    root.Left = createTreeNode(4)
    root.Right = &TreeNode{Value: 5}
    root.Left.Right = createTreeNode(2)
    root.Right.Left = createTreeNode(8)
    root.traverse()
    fmt.Println()
    myroot := myTreeNode{&root}
    myroot.postOrder()
}

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

843 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传