1. 程式人生 > >go語言-面向物件之結構體與方法(十)

go語言-面向物件之結構體與方法(十)

go語言僅支援封裝,不支援繼承和多型

type node struct {
	value int
	left *node
	right *node
}

	var root node
	root = node{value:1}
	//root := node{value:1}
	root.left = &node{value:2}
	root.left.right = &node{value:3}
	root.right = new(node)

不論地址還是結構本身,一律使用.來訪問成員

root.right.left = createNode(5)//&node{value:5}

	root.print()
	//fmt.Println(root)
	fmt.Println()
	root.setValue(100)
	root.print()

顯示定義和命名方法接收者

func (root node) print()  {  //等價 print(root node) {
	fmt.Printf("value=%d", root.value)
} 

只有使用指標才可以改變結構內容

nil指標也可以呼叫方法

func (root *node) setValue(value int)  {  //等價 setValue(root *node, value int) {
	root.value = value
}

使用自定義工廠函式

注意返回了局部變數的地址

func createNode(value int) *node  {
	return &node{value:value}
}

值接受者vs指標接收者
要改變內容必須使用指標接收者
結構過大也要考慮使用指標接收者
一致性:如有指標接收者,最好都是指標接收者


//值接收者 是go語言特有
//值/指標接收者均可接收值/指標