Golang 支援一些類似面向對象程式設計的特性,方法就其中之一,本文将詳細介紹 Golang 中方法相關的知識。
方法(Methods)定義
在 Golang 中,方法(methods)是與特定類型相關聯的函數。類似面向對象語言中的成員函數,方法可以通路該類型的資料和其他方法。
方法定義由關鍵字 func 開始,後面跟上接收者、方法名、參數清單和傳回值清單。方法定義的基本文法如下:
func (r ReceiverType) methodName(parameterList) (returnParameterList) {
// 方法體
}
具體含義如下:
- r:是接收者類型(receiver)的簡寫,一般使用接收者首字母的小寫格式(如果方法體中使用不到可以省略)。
- ReceiverType: 表示接收者類型,可以是結構體、自定義函數類型等。
- methodName: 表示方法名,根據慣例,方法名的首字母通常使用大寫字母。
- parameterList: 表示方法的參數清單,類似于函數的參數清單。
- returnParameterList: 表示方法的傳回值,可以有多個傳回值。
- 方法體:包含實作方法功能的代碼塊。
以下是一個簡單的示例代碼:
package main
import "fmt"
type Person struct {
Name string
Age int
}
// SayHello 在 Person 類型上定義一個方法 SayHello
func (p Person) SayHello() {
fmt.Printf("Hello, my name is %s and I'm %d years old.\n", p.Name, p.Age)
}
func main() {
// 建立一個 Person 類型的執行個體
var person Person
person.Name = "路多辛"
person.Age = 18
// 調用 SayHello 方法
person.SayHello()
}
首先定義了 Person 結構體,并為其定義了 SayHello 方法。然後在 main 函數中首先建立了一個 Person 類型的執行個體,然後調用了它的 SayHello 方法。
接收者類型
方法的接收者可以是值接收者(value receiver),也可以是指針接收者(pointer receiver)。
當使用值接收者調用方法時,Golang 會通過值傳遞的方式将接收者傳遞給方法,并對方法中的接收者進行拷貝,值接收者适用于對接收者的值進行操作的場景。
當使用指針接收者調用方法時,Golang 會通過指針傳遞的方式将接收者傳遞給方法,方法可以修改接收者的資料,這種方法适用于需要修改接收者狀态的場景。
來看一個簡單的示例:
package main
import "fmt"
type Rectangle struct {
width, height float64
}
// 使用值接收者調用方法,将傳回矩形的面積
func (r Rectangle) Area() float64 {
return r.width * r.height
}
// 使用指針接收者調用方法,将修改矩形的寬度
func (r *Rectangle) SetWidth(w float64) {
r.width = w
}
func main() {
// 建立一個 Rectangle 類型的執行個體
var rect Rectangle
rect.width = 10.0
rect.height = 5.0
// 使用值接收者調用 Area 方法,并列印結果
fmt.Println("Area:", rect.Area()) // 輸出:Area: 50.000000
// 使用指針接收者調用 SetWidth 方法,并列印結果
rect.SetWidth(15.0)
fmt.Println("Width:", rect.width) // 輸出:Width: 15.000000
}
方法的其他特性
方法有很多和函數類似的特性,如下:
- 可以接受零個或多個輸入參數
- 支援可變輸入參數,可變參數意味着方法可以接受不定數量參數
- 可以傳回零個或多個參數
- 不支援重載
- 接收者類型相同的情況下,方法名不能重複
- 不支援預設參數
小結
本文詳細講解了 Golang 中方法相關的知識,方法是 Golang 中實作類似面向對象程式設計特性的一種機制,通過使用方法,可以提高代碼的可重用性和可維護性。