Go語言函數
函數是一組執行任務的語句。 每個Go程序至少有一個函數,也就是main()
函數,所有最小的程序可以定義附加的函數。
可以將代碼分成單獨的函數。如何在不同的函數之間劃分代碼取決於程序員,但在邏輯上,通常每個函數執行一個特定的任務。
函數聲明告訴編譯器有關函數的名稱,返回類型和參數。 函數定義提供了函數的實際主體。
Go標準庫提供了許多內置的函數,在編寫程序時可以調用。 例如,函數len()
接受各種類型的參數,並返回類型的長度。 例如,如果一個字符串傳遞給它,它將返回字符串的字節長度,如果一個數組傳遞給它,它將返回數組長度,也就是數組中的元素數量。
函數有各種不同的叫法(名稱),如方法或子例程或過程等。
定義函數
Go編程語言中函數定義的一般形式如下:
func function_name( [parameter list] ) [return_types]
{
body of the function
}
Go編程語言中的函數定義包括函數頭和函數體。這裏是一個函數的所有部分:
- func開始一個函數的聲明。
- 函數名稱(function_name):這是函數的名稱。函數名和參數列表一起構成函數簽名。
- 參數:參數類似於佔位符。 調用函數時,將一個值傳遞給參數。 此值稱爲實際參數或參數。 參數列表指的是函數的參數的類型,順序和數量。 參數是可選的; 即,函數可以不用包含參數。
- 返回類型:函數可以有返回值列表。
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()
函數使用的也是相同的方法。
函數用法
函數用法
描述
函數作爲值使用
函數可以即時創建,並且可以用作值。
函數閉包
函數閉包是匿名函數,可以在動態規劃中使用。
方法
方法是使用接收器的特殊函數。