閉包:一個函數和與其相關的引用環境組合而成的實體
package main
import "fmt"
func main() {
var f = Adder()
fmt.Print(f(1)," - ")
fmt.Print(f(20)," - ")
fmt.Print(f(300))
}
func Adder() func(int) int {
var x int
return func(delta int) int {
fmt.Println()
fmt.Printf("delta:%d", delta)
fmt.Println()
x += delta
return x
}
}
輸出:
delta:1
1 -
delta:20
21 -
delta:300
321
Process finished with exit code 0
package main
import (
"fmt"
"strings"
)
func makeSuffixFunc(suffix string) func(string) string {
return func(name string) string {
if !strings.HasSuffix(name, suffix) {
return name + suffix
}
return name
}
}
func main() {
func1 := makeSuffixFunc(".bmp")
func2 := makeSuffixFunc(".jpg")
fmt.Println(func1("test"))
fmt.Println(func2("test"))
}
輸出:
test.bmp
test.jpg
Process finished with exit code 0