Go語言學習筆記(五)方法

對象就是簡單的一個值或者變量,並且擁有其方法,而方法是某種特定類型的函數。

面向對象編程就是使用方法來描述每個數據結構的屬性和操作。


方法的聲明和函數類似,只是在函數名字前面多了一個參數,這個參數把這個方法綁定到這個參數對應的類型上。

func Distance(p, q Point) float64 {

}


func (p Point) Distance(q Point) float64 {

}


這個參數 p 稱爲方法的接收者。表達式p.Distance稱作選擇子(selector),因爲它爲接收者p選擇合適的Distance方法。

選擇子也用於選擇結構類型中的某些字段值,就像p.X中的字段值。

由於方法和字段來自於同一個命名空間,因此Point結構類型中生命一個叫做X的方法,會與字段X衝突。

每個類型都有一個命名空間。


可以將方法綁定到任何類型上,除了指針類型和接口類型


命名類型(Point)和他們的指針(*Point),是唯一可以出現在接收者生命處的類型。


如果類型T的所有方法的接收者是它自己(T),而不是其指針(*T),那麼複製它就是安全的。調用方法的時候必須進行一次複製。

nil是一個合法的接收者,但必須進行類型轉換。


結構體中,添加匿名結構體,使用方法更方便。


方法變量,它是一個函數,把方法綁定到一個接收者上面。

distanceFromP := p.Distance

distanceFromP(q)

方法表達式,把原來方法的接收者變成函數的第一個參數。

distance := Point.Distance

distance(p, q)


要封裝一個對象,必須使用結構體


Go語言中封裝的單元是包,而不是類型。無論對於函數內的代碼,還是對於方法內的代碼,結構體類型的每個字段,對於同一個包內的代碼都是可見的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章