go語言之進階篇方法面向過程和對象函數的區別

方法

在面向對象編程中,一個對象其實也就是一個簡單的值或者一個變量,在這個對象中會包含一些函數,這些帶有接收者的函數,我們稱之爲方法*。本質上,一個方法則是一個和特殊類型關聯的函數。

一個面向對象的程序會用方法來表達其屬性和對應的操作,這樣使用這個對象的用戶就不需要直接去操作對象,而是藉助方法來做這些事情。

在Go語言中,可以給任意自定義類型(包括內置類型,但不包括指針類型)添加相應的方法。

方法總是綁定對象實例,並隱式將實例作爲第1實參 (receiver),方法的語法如下:

func (receiver ReceiverType) funcName(parameters) (results)
  • 參數 receiver 可任意命名。如方法中未曾使用,可省略參數名。
  • 參數 receiver 類型可以是 T 或 *T。基類型 T 不能是接⼝或指針。
  • 不支持重載方法,也就是說,不能定義名字相同但是不同參數的方法

爲類型添加方法


package main
 
import "fmt"
 
//面向對象,方法:給某個類型綁定一個函數
func Add01(a, b int) int {
    return a + b
}
 
type long int
 
//tmp叫接收者,接收者就是傳遞的一個參數
func (tmp long) Add02(other long) long {
    return tmp + other
}
 
func main() {
    var result int
    result = Add01(1, 1) //普通函數調用方式
    fmt.Println("result = ", result)
 
    //定義一個變量
    var a long = 2
 
    //調用方法格式: 變量名.函數(所需參數)
    r := a.Add02(3)
    fmt.Println("r = ", r)
 
}

執行:

result =  2
r =  5      //long =2  傳給tmp, a.add02(3) 傳給(other long)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章