函數(shù)是一組執(zhí)行任務的語句。 每個Go程序至少有一個函數(shù),也就是main()函數(shù),所有最小的程序可以定義附加的函數(shù)。
可以將代碼分成單獨的函數(shù)。如何在不同的函數(shù)之間劃分代碼取決于程序員,但在邏輯上,通常每個函數(shù)執(zhí)行一個特定的任務。
函數(shù)聲明告訴編譯器有關函數(shù)的名稱,返回類型和參數(shù)。 函數(shù)定義提供了函數(shù)的實際主體。
Go標準庫提供了許多內置的函數(shù),在編寫程序時可以調用。 例如,函數(shù)len()接受各種類型的參數(shù),并返回類型的長度。 例如,如果一個字符串傳遞給它,它將返回字符串的字節(jié)長度,如果一個數(shù)組傳遞給它,它將返回數(shù)組長度,也就是數(shù)組中的元素數(shù)量。
函數(shù)有各種不同的叫法(名稱),如方法或子例程或過程等。
Go編程語言中函數(shù)定義的一般形式如下:
func function_name( [parameter list] ) [return_types]
{
body of the function
}
Go編程語言中的函數(shù)定義包括函數(shù)頭和函數(shù)體。這里是一個函數(shù)的所有部分:
return_types是函數(shù)返回的值的數(shù)據類型的列表。某些函數(shù)執(zhí)行所需的操作,而不用(無)返回值。在這種情況下,return_type就不是必需的。以下是一個名為max()的函數(shù)的源代碼。此函數(shù)使用兩個參數(shù)num1和num2,并返回這兩個參數(shù)的最大值:
/* 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
}
在創(chuàng)建Go函數(shù)時,需要給出函數(shù)的定義。要使用函數(shù),必須調用該函數(shù)來執(zhí)行定義的任務。
當程序調用一個函數(shù)時,程序控制轉移到被調用的函數(shù)。 被調用函數(shù)執(zhí)行定義的任務,并且在返回語句執(zhí)行時或者到達函數(shù)結束閉包括時,它返回程序控制回到主程序。
要調用函數(shù),只需要傳遞所需的參數(shù)以及函數(shù)名稱,如果函數(shù)返回一個值,那么可以存儲返回的值。 例如:
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()函數(shù)與main()函數(shù)一起編譯源代碼。當運行最終可執(zhí)行文件時,它將產生以下結果:
Max value is : 200
Go函數(shù)可以返回多個值。 例如:
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)
}
當上述代碼編譯和執(zhí)行時,它產生以下結果:
Curry
Hippo
如果函數(shù)要使用參數(shù),它必須聲明接受參數(shù)值的變量。這些變量稱為函數(shù)的形式參數(shù)。
形式參數(shù)與函數(shù)內部的其他局部變量一樣,在進入函數(shù)時創(chuàng)建,在退出時被銷毀。
在調用函數(shù)時,有兩種方法可以將參數(shù)傳遞給函數(shù):
| 調用類型 | 描述 |
|---|---|
| 按值調用 | 此方法將參數(shù)的實際值復制到函數(shù)的形式參數(shù)中。 在這種情況下,對函數(shù)中的參數(shù)所做的更改不會影響參數(shù)的值,退出函數(shù)后參數(shù)的值還是原值。 |
| 按引用調用 | 此方法將參數(shù)的地址復制到形式參數(shù)中。在函數(shù)內部,地址用于訪問在調用中使用的實際參數(shù)。這意味著對參數(shù)所做的更改會影響參數(shù)的值,退出函數(shù)后參數(shù)的值是函數(shù)內部被修改后的值。 |
默認情況下,Go使用按值調用來傳遞參數(shù)。一般來說,函數(shù)中的代碼不能改變用于調用函數(shù)的參數(shù),所以調用max()函數(shù)使用的也是相同的方法。
| 函數(shù)用法 | 描述 |
|---|---|
| 函數(shù)作為值使用 | 函數(shù)可以即時創(chuàng)建,并且可以用作值。 |
| 函數(shù)閉包 | 函數(shù)閉包是匿名函數(shù),可以在動態(tài)規(guī)劃中使用。 |
| 方法 | 方法是使用接收器的特殊函數(shù)。 |