Golang是目前最熱門的程式語言之一,其特點之一就是函數及方法的設計非常出色。本文將詳細介紹Golang函數及方法的相關知識。
一、函數
Golang函數的基本語法:
func function_name( [parameter list] ) [return_types] { //函数体 }
函數的參數清單與其傳回值型別都是可選的,可以不寫。如果函數只有一個傳回值且其類型為非介面類型,則可省略括號。
例如:
func add(x int, y int) int { return x + y } func main() { fmt.Println(add(1, 2)) }
函數add接收兩個int型別的參數,傳回值型別也為int,透過表達式add(1, 2)呼叫函數並輸出其傳回值。輸出結果為3。
Golang函數支援多個回傳值。例如:
func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap("hello", "world") fmt.Println(a, b) }
函數swap接收兩個string類型的參數,傳回值類型為兩個string類型,即傳回值為兩個字串,透過多重賦值a, b := swap("hello" , "world")將函數傳回值分別賦值給a和b,最後輸出hello world。
二、方法
在Golang語言中,方法是指某個類型的接收器(receiver)上的一個函數,該型別就是一個類別。這種類型可以是一個結構體(struct),也可以是任何自訂類型。
方法的定義格式如下:
func (variable_name type) function_name([parameter list]) [return_types] { //函数体 }
其中,variable_name 是類型(type)的一個實例(instance),function_name是該類型的方法(method)。
例如:
type Rectangle struct { length, width int } func (r Rectangle) area() int { return r.length * r.width } func main() { r := Rectangle{length: 10, width: 5} fmt.Println("area: ", r.area()) }
上述程式碼定義了類型Rectangle,該類型有length和width兩個字段,同時定義了方法area(),因此它是一個類別。在方法的宣告中,接收器為Rectangle類型,方法名為area(),傳回值為int型別。
下面的語句透過建立一個名為r的Rectangle實例並呼叫其area()方法來對這個類別進行測試。
執行輸出結果為:
area: 50
方法也可以有指標接收器,也就是指向該類型的指標。例如:
type Circle struct { radius float64 } func (c *Circle) area() float64 { return math.Pi * c.radius * c.radius } func main() { c := Circle{radius: 5} fmt.Println("area:", c.area()) }
上述程式碼定義了類型Circle,該類型有radius一個字段,同時定義了方法area(),並透過指標接收器指向該類型。因此,area()方法將會更改Circle實例上的值。
最後,我們需要注意到,除非被明確地標記為複製類型(receicer),否則Golang中的所有類型都可以具有方法。然而,在某些情況下,尤其是在高效能產業時,方法使用指標接收器(receiver)在效能上更有效率。然而,你需要記住這些規則,因為如果你不小心寫了錯誤的方法,則會導致程式出現錯誤。
三、總結
在Golang語言中,函數和方法(類別)是基本的程式單元。透過學習函數的語法結構,我們可以很方便地定義和呼叫函數,使程式結構更加清晰簡潔。同時,方法是內建在類別中,是類別的一部分,因此封裝了該類別中的實例變數和方法。這樣,我們可以更方便地管理程式的各種資訊和方法,並且避免了資源的浪費。
以上是golang函數 方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!