go闭包


闭包的实现思路

package main
import "fmt"
//闭包的基本思路
func f2(x,y int){
	fmt.Println("this is f2")
	sum:=x+y
	fmt.Println(sum)
}
func f3 ( ff func (int,int),m,n int ) func() {
	tmp:=func(){
		ff(m,n)
	}
	return tmp
}
func  f1( f func() )  {
	f()
}
func main() {
	ret:=f3(f2,100,200)
	f1(ret)
}

使用案例1

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(){
    jpgFunc:=makeSuffixFunc(".jpg")
    txtFunc:=makeSuffixFunc(".txt")
    fmt.Println(jpgFunc("哈哈"))
    fmt.Println(txtFunc("哈哈"))
}

使用案例2

package main
import "fmt"
//闭包第二个应用模拟计算器
func calc(base int) ( func( int ) int , func( int ) int ){
    add:=func(i int ) int {
        base+=i
        return base
    }
    sub:=func (i int) int {
        base-=i
        return base
    }
    return add ,sub
}

func main(){
    f1,f2:=calc(10)
    fmt.Println(f1(1))
    fmt.Println(f2(2))
}