Skip to main content

Closure

Example

package main

import (
"fmt"
)

func main() {
// 變數 t 其實就是 func() int
t := test()

// 調用變數 t,也就是調用 func() int
fmt.Println(t()) // 1
fmt.Println(t()) // 2
fmt.Println(t()) // 3
fmt.Println(t()) // 4

o := test()
fmt.Println(o()) // 1

}

func test() func() int {
i := 0

// 調用 test() 會回傳這個 func
return func() int {
i++
return i
}
}
package main

import "fmt"

type Getter func() int
type Setter func(int)

// getter, setter 這兩個 closure 的 x 為同一個變數
func x_getter_setter(x int) (Getter, Setter) {
fmt.Printf("the parameter :\tx (%p) = %d\n", &x, x)

getter := func() int {
fmt.Printf("getter: %p\n", &x)
return x
}
setter := func(n int) {
x = n
fmt.Printf("setter: %p\n", &x)
}
return getter, setter
}

func main() {
getX, setX := x_getter_setter(10)

fmt.Println(getX()) // 10
setX(20)
fmt.Println(getX()) // 20
}