go中閉包
閉包是什麼
- 閉包是一個函式,這個函式包含了他外部作用域的一個變數
- 底層原理
- 1.函式可作為返回值 2.函式內部查詢變數的順序,先在自已內部找,找不到往外層找
//返回值是函式型別
func Adder() func(int) int{
var x=100
return func(y int) int{
x+=y
return x
}
}
func Adder2(x int) func(int) int{
//var x=100
return func(y int) int{
x+=y
return x
}
}
func MakeSuffixFunc(suffix string) func(string) string {
return func(name string) string {
if !strings.HasSuffix(name, suffix) {
return name + suffix
}
return name
}
}
import (
"fmt"
"testing"
)
func TestAdder(t *testing.T) {
ret:= Adder()
ret2:= ret(200)
fmt.Println(ret2)
}
func TestAdder2(t *testing.T) {
ret:= Adder2(100)
ret2:= ret(200)
fmt.Println(ret2)
}
func TestMakeSuffixFunc(t *testing.T) {
jpgFunc := MakeSuffixFunc(".jpg")
txtFunc := MakeSuffixFunc(".txt")
fmt.Println(jpgFunc("test")) //test.jpg
fmt.Println(txtFunc("test")) //test.txt
fmt.Println(txtFunc("t11.txt")) //test.txt
}
「其他文章」