函式是一組執行任務的語句。 每個Go程式至少有一個函式,也就是main()
函式,所有最小的程式可以定義附加的函式。
可以將程式碼分成單獨的函式。如何在不同的函式之間劃分程式碼取決於程式員,但在邏輯上,通常每個函式執行一個特定的任務。
函式宣告告訴編譯器有關函式的名稱,返回型別和引數。 函式定義提供了函式的實際主體。
Go標準庫提供了許多內建的函式,在編寫程式時可以呼叫。 例如,函式len()
接受各種型別的引數,並返回型別的長度。 例如,如果一個字串傳遞給它,它將返回字串的位元組長度,如果一個陣列傳遞給它,它將返回陣列長度,也就是陣列中的元素數量。
函式有各種不同的叫法(名稱),如方法或子例程或過程等。
Go程式設計語言中函式定義的一般形式如下:
func function_name( [parameter list] ) [return_types]
{
body of the function
}
Go程式設計語言中的函式定義包括函式頭和函式體。這裡是一個函式的所有部分:
return_types
是函式返回的值的資料型別的列表。某些函式執行所需的操作,而不用(無)返回值。在這種情況下,return_type
就不是必需的。以下是一個名為max()
的函式的原始碼。此函式使用兩個引數num1
和num2
,並返回這兩個引數的最大值:
/* function returning the max between two numbers */
func max(num1, num2 int) int
{
/* local variable declaration */
result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
在建立Go函式時,需要給出函式的定義。要使用函式,必須呼叫該函式來執行定義的任務。
當程式呼叫一個函式時,程式控制轉移到被呼叫的函式。 被呼叫函式執行定義的任務,並且在返回語句執行時或者到達函式結束閉包括時,它返回程式控制回到主程式。
要呼叫函式,只需要傳遞所需的引數以及函式名稱,如果函式返回一個值,那麼可以儲存返回的值。 例如:
package main
import "fmt"
func main() {
/* local variable definition */
var a int = 100
var b int = 200
var ret int
/* calling a function to get max value */
ret = max(a, b) // 儲存返回的值到 ret 變數中
fmt.Printf( "Max value is : %d\n", ret )
}
/* function returning the max between two numbers */
func max(num1, num2 int) int {
/* local variable declaration */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
在這裡保持max()
函式與main()
函式一起編譯原始碼。當執行最終可執行檔案時,它將產生以下結果:
Max value is : 200
Go函式可以返回多個值。 例如:
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Hippo", "Curry")
fmt.Println(a, b)
}
當上述程式碼編譯和執行時,它產生以下結果:
Curry
Hippo
如果函式要使用引數,它必須宣告接受引數值的變數。這些變數稱為函式的形式引數。
形式引數與函式內部的其他區域性變數一樣,在進入函式時建立,在退出時被銷毀。
在呼叫函式時,有兩種方法可以將引數傳遞給函式:
呼叫型別 | 描述 |
---|---|
按值呼叫 | 此方法將引數的實際值複製到函式的形式引數中。 在這種情況下,對函式中的引數所做的更改不會影響引數的值,退出函式後引數的值還是原值。 |
按參照呼叫 | 此方法將引數的地址複製到形式引數中。在函式內部,地址用於存取在呼叫中使用的實際引數。這意味著對引數所做的更改會影響引數的值,退出函式後引數的值是函式內部被修改後的值。 |
預設情況下,Go使用按值呼叫來傳遞引數。一般來說,函式中的程式碼不能改變用於呼叫函式的引數,所以呼叫max()
函式使用的也是相同的方法。
函式用法 | 描述 |
---|---|
函式作為值使用 | 函式可以即時建立,並且可以用作值。 |
函式閉包 | 函式閉包是匿名函式,可以在動態規劃中使用。 |
方法 | 方法是使用接收器的特殊函式。 |