Golang 中函數(shù)(Function)和方法(Method)的區(qū)別詳解
在 Golang 中,大家必然會頻繁使用到函數(shù)(Function)和方法(Method),但是有的同學(xué)可能并沒有注意過函數(shù)和方法的異同點,函數(shù)(Function)和方法(Method)都是用來執(zhí)行特定任務(wù)的代碼塊,雖然很相似,但也有很大的區(qū)別。本文將詳細講解函數(shù)和方法的定義以及它們的異同點。
函數(shù)(Function)
函數(shù)是 Golang 程序的基本組成部分之一,是一段獨立的代碼塊,可以被獨立地定義和調(diào)用。函數(shù)的定義以 func 關(guān)鍵字開始,后面跟著函數(shù)名、參數(shù)列表、返回值類型和函數(shù)體。看一個簡單的函數(shù)定義示例:
func add(a b int) int {
return a + b
}
函數(shù)的調(diào)用方式是通過函數(shù)名和參數(shù)列表完成的。例如:
result := add(2, 3)
函數(shù)的其他更多特點和類型就不展開講了,不是本文的重點。本文只簡單介紹下函數(shù)的基本定義,重點是說明函數(shù)和方法的異同點。
方法(Method)
方法是與特定類型(結(jié)構(gòu)體類型、函數(shù)類型、接口類型等)相關(guān)聯(lián)的函數(shù)。是在類型的定義之外定義的,但與該類型緊密關(guān)聯(lián)。方法的定義類似于函數(shù),但在函數(shù)名之前會添加一個接收者(receiver),指定方法屬于哪個類型。以下是一個簡單的方法示例:
type Rectangle struct {
width float64
height float64
}
// 定義 Area 方法
func (r Rectangle) Area() float64 {
return r.width * r.height
}
首先定義了一個名為 Rectangle 的結(jié)構(gòu)體類型,然后定義了一個名為 Area 的方法,該方法接收一個 Rectangle 類型的接收者。
方法的調(diào)用與函數(shù)類似,但需要先實例化一個對應(yīng)的接收者類型的實例,通過這個實例調(diào)用的方式來執(zhí)行。例如:
rect := Rectangle{width: 3, height: 4}
area := rect.Area()
這段代碼首先創(chuàng)建了一個 Rectangle 類型的實例,然后通過這個實例調(diào)用了 Area 方法。
可以看出,方法是通過接收者與類型綁定的,因此可以在方法內(nèi)部訪問接收者類型的字段和方法。而函數(shù)則是獨立存在的,沒有與特定類型相關(guān)聯(lián)。
小結(jié)
函數(shù)和方法都是用來執(zhí)行特定任務(wù)的代碼塊,定義和使用都非常類似,主要有兩點不同:
- 函數(shù)是獨立存在的,而方法是與特定類型相關(guān)聯(lián)的;
- 函數(shù)可以直接調(diào)用,而方法調(diào)用需要通過對應(yīng)的接收者類型實例。