Go语言学习笔记(8)面向对象

package main

import "fmt"

func main() {
	//定义treeNode结构体
	var root treeNode

	root = treeNode{value:3}
	fmt.Println(root)
	fmt.Println()

	root.left = &treeNode{}
	root.left.print()
	fmt.Println()

	root.right = &treeNode{5,nil,nil}
	root.right.print()
	fmt.Println()

	root.right.left = new(treeNode)
	root.right.left.print()
	fmt.Println()

	root.left.right = createValue(2)
	root.left.right.print()
	fmt.Println()



	root.right.left.checkValue(4)
	root.right.left.print()
	fmt.Println()

	//var roots *treeNode
	//roots.setValue(200)
	//roots = &root
	//roots.setValue(300)
	//roots.print()

	root.traverse()

}


//定义结构体 struct
type treeNode struct {
	value int
	left, right *treeNode
}

//为结构体定义方法 打印
func (node treeNode) print() {
	fmt.Print(node.value)
}

func (node *treeNode) checkValue(value int) {
	node.value = value
}
//添加tree
func addValue(value int) *treeNode{
	return &treeNode{value:value}
}
//修改
func (node *treeNode) setValue(value int) {
	if node == nil {
		fmt.Println("nil也可以作为指针")
		return
	}
	node.value = value
}

func createValue(value int ) *treeNode{
	return &treeNode{value:value}
}

/**
 *排序
 */
func (node *treeNode) traverse() {
	if (node == nil) {
		return
	}

	//左子值
	node.left.traverse()
	node.print()
	node.right.traverse()
}


{3 <nil> <nil>}

0
5
0
2
4
02345
1:nil指针也可以调用方法
2:要改变内容必须使用指针接受者
3:结构过大也考虑使用指针接受者
4:建议一致性:如果是指针接受者,最好都是指针接受者
5:值接受者是go语言特有

猜你喜欢

转载自blog.csdn.net/ltstud/article/details/84585995