天天看點

Go基礎(複雜類型):函數的閉包

函數的閉包

Go 函數可以是一個閉包。閉包是一個函數值,它引用了其函數體之外的變量。該函數可以通路并賦予其引用的變量的值,換句話說,該函數被“綁定”在了這些變量上。

例如,函數 adder 傳回一個閉包。每個閉包都被綁定在其各自的 sum 變量上。

一、下面來看一個例子咯:

package main

import "fmt"

func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

func main() {
    pos, neg := adder(), adder()
    for i := 0; i < 10; i++ {
        fmt.Println(
            pos(i),
            neg(-2*i),
        )
    }
}
           

輸出的結果:

0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90