1. 程式人生 > >go語言學習(3)面向物件,結構體和方法

go語言學習(3)面向物件,結構體和方法

感覺每種語言都是其他的語言的一些交集,看見go就有種kotlin和C的孩子的感覺,雖然我並不清楚他們之間的借鑑關係

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

go語言只有struct沒有class

go語言的結構的定義和C++類似

type treeNode struct {
   value       int
   left, right *treeNode
}

為結構定義方法:

func (node treeNode) print() { //接收者相當於this,這個方法相當於kotlin的擴充套件方法
   fmt.Print(node.value, " ")
}

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

使用指標作為方法接受者

func (node *treeNode) setValue(value int) {
   node.value = value
}

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

nil指標也可以呼叫方法!

func (node *treeNode) setValue(value int) {
   if(node == nil) {
      fmt.Println("Setting value to nil node, ignore it")
   }
   node.value = value
}

也就是通過這樣的方式可以解決java中最常見的空指標異常的問題,這個問題是一個大問題,所以現在我儘可能使用kotlin開發android應用,java開發過程中的空指標問題真的是一種很麻煩的問題

常見操作(二叉樹的中序遍歷操作)

//中序遍歷操作,基本操作
func (node *treeNode) traverse() {
   if node == nil {
      return
   }
   node.left.traverse()
   node.print()
   node.right.traverse()
}

值接收者和指標接收者的使用

1.要改變內容必須使用指標接收者

2.結構過大也考慮指標接收者

3.一致性:如有指標接收者,最好都是指標接收者

4.值接受者是go語言特有的

5.值/指標均可接收值/指標,並不會改變呼叫的方式,go語言在這方面很智慧