go中閉包

語言: CN / TW / HK

閉包是什麼

  • 閉包是一個函數,這個函數包含了他外部作用域的一個變量
  • 底層原理
  • 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
}