go語言-面向物件之結構體與方法(十)
阿新 • • 發佈:2019-02-10
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語言特有
//值/指標接收者均可接收值/指標