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
2
3

解釋: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變量,最終輸出出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章