GO語言學習筆記(五)GO語言函式的簡易計算
一、計算示例
package main import "fmt" func main() { a := 100 b := 2 fmt.Printf("%d + %d = %d\n", a, b, Add(a, b)) fmt.Printf("%d - %d = %d\n", a, b, Sub(a, b)) fmt.Printf("%d * %d = %d\n", a, b, Mul(a, b)) fmt.Printf("%d / %d = %d\n", a, b, Div(a, b)) } func Add(x, y int) int { return x + y } func Sub(x, y int) int { return x - y } func Mul(x, y int) int { return x * y } func Div(x, y int) int { return x / y }
執行程式碼,輸出結果如下:
100 + 2 = 102 100 - 2 = 98 100 * 2 = 200 100 / 2 = 50
解釋:在GO語言中,函式的定義使用func關鍵字宣告Add是一個函式,函式中需要兩個傳參,分別是x和y,並指定x和y都是int型別。大括號前的那個int是Add函式的返回值的型別,定義Add函式返回的值也必須是int型別。
二、多返回值特性
GO語言是一個多返回值型別語言,如果是多個返回值的話,可以寫成(int, int), return,必須返回數量相等的返回值,示例如下:
package main import "fmt" func vals() (int, int) { return 3, 7 } func main() { a, b := vals() fmt.Println(a) fmt.Println(b) _, c := vals()//使用空白的識別符號_,可以選擇不接收返回值 fmt.Println(c) }
三、匿名函式和閉包
匿名函式:就是沒有名稱的函式
示例如下:
package main import "fmt" func intSeq() func() int { i := 0 return func() int { i++ return i } } func main() { nextInt := intSeq() fmt.Println(nextInt()) fmt.Println(nextInt()) fmt.Println(nextInt()) }
執行結果如下:
解釋:1)func intSeq() func() int {}//首先頂一個intSeq()的函式,這個函式比較特殊,它的返回值也是一個函式func(),func()這個函式呢是沒有名稱的函式,也就是匿名函式 ,因為func()是在intSeq這個函式中的函式,所以func()又可以被稱為閉包 ,最終intSeq()是將func()函式作為返回值返回。
2)nextInt := intSeq()//把intSeq()函式賦值給nextInt這個變數
3)fmt.Println(nextInt())//輸出nextInt的值,nextInt就呼叫intSeq()
4)
i := 0
return func() int {
i++
return i//給i變數初始化一個值為0,因為nextInt呼叫intSeq(),而func()的返回值就是intSeq()的返回值,則變數i迴圈增加,每次增加1,就這樣每迴圈一次,新的i的變數就得到新值,i就把值返回給func()這個匿名函式,然後func()這個匿名函式又把值返回給intSeq()這個函式,然後intSeq()函式又把值賦值給nextInt變數,最終輸出出來。