函數(shù)是基本的代碼塊,用于執(zhí)行一個任務。
Go 語言最少有1個 main() 函數(shù)。
你可以通過函數(shù)來劃分不同功能,邏輯上每個函數(shù)執(zhí)行的是指定的任務。
函數(shù)聲明告訴了編譯器函數(shù)的名稱,返回類型和參數(shù)。
Go 語言標準庫提供了多種可動用的內(nèi)置的函數(shù)。例如,len() 函數(shù)可以接受不同類型參數(shù)并返回該類型的長度。如果我們傳入的是字符串則返回字符串的長度,如果傳入的是數(shù)組,則返回數(shù)組中包含的分量個數(shù)。
Go 語言函數(shù)定義格式如下:
func function_name( [parameter list] ) [return_types]{
函數(shù)體
}
函數(shù)定義解析:
以下實例為 max() 函數(shù)的代碼,該函數(shù)傳入兩個整型參數(shù) num1 和 num2,并返回這兩個參數(shù)的最大值:
/* 函數(shù)返回兩個數(shù)的最大值 */
func max(num1, num2 int) int{
/* 聲明局部變量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
當創(chuàng)建函數(shù)時,你定義了函數(shù)需要做什么,通過調(diào)用該函數(shù)來執(zhí)行指定任務。
調(diào)用函數(shù),向函數(shù)傳遞參數(shù),并返回值,例如:
package main
import "fmt"
func main() {
/* 定義局部變量 */
var a int = 100
var b int = 200
var ret int
/* 調(diào)用函數(shù)并返回最大值 */
ret = max(a, b)
fmt.Printf( "最大值是 : %d\n", ret )
}
/* 函數(shù)返回兩個數(shù)的最大值 */
func max(num1, num2 int) int {
/* 定義局部變量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
以上實例在 main() 函數(shù)中調(diào)用 max()函數(shù),執(zhí)行結(jié)果為:
最大值是 : 200
Go 函數(shù)可以返回多個值,例如:
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Mahesh", "Kumar")
fmt.Println(a, b)
}
以上實例執(zhí)行結(jié)果為:
Kumar Mahesh
函數(shù)如果使用參數(shù),該變量可稱為函數(shù)的形參。
形參就像定義在函數(shù)體內(nèi)的局部變量。
調(diào)用函數(shù),可以通過兩種方式來傳遞參數(shù):
傳遞類型 | 描述 |
---|---|
值傳遞 | 值傳遞是指在調(diào)用函數(shù)時將實際參數(shù)復制一份傳遞到函數(shù)中,這樣在函數(shù)中如果對參數(shù)進行修改,將不會影響到實際參數(shù)。 |
引用傳遞 | 引用傳遞是指在調(diào)用函數(shù)時將實際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對參數(shù)所進行的修改,將影響到實際參數(shù)。 |
默認情況下,Go 語言使用的是值傳遞,即在調(diào)用過程中不會影響到實際參數(shù)。
函數(shù)用法 | 描述 |
---|---|
函數(shù)作為值 | 函數(shù)定義后可作為值來使用 |
閉包 | 閉包是匿名函數(shù),可在動態(tài)編程中使用 |
方法 | 方法就是一個包含了接受者的函數(shù) |
Go語言中的defer語句會將其后面跟隨的語句進行延遲處理
在defer所屬的函數(shù)即將返回時,將延遲處理的語句按照defer定義的順序逆序執(zhí)行,即先進后出
package main
import "fmt"
func main() {
fmt.Println("開始")
defer fmt.Println(1)
defer fmt.Println(2)
defer fmt.Println(3)
fmt.Println("結(jié)束")
}
以上代碼執(zhí)行結(jié)果如下
開始
結(jié)束
3
2
1
更多建議: