go:匿名函数

1. 简介

  当不想给函数命名时,可以使用匿名函数,匿名函数不能独立存在,必须将匿名函数赋值给某个变量,然后通过这个变量调用对应的匿名函数;

  示例:

func main() {

    fpx:= func(x,y int)(z int) {
        return x+y
    }
    fmt.Println(fpx(1,2))
}

  输出结果:3

2. 将匿名函数作为返回值

2.1 普通匿名函数

func main() {

    fpx:=Add2() // 返回 Add2() 中 return 的函数,即 b +2 
    z := fpx(1) // 将 1 传入函数,即 1 + 2 = 3
    fmt.Println(z)
}

func Add2() func(b int) int {
    return func(b int) int {
        return b + 2
    }
}

2.2  匿名函数引用外部函数变量

  引用闭包时,在这个引用的生命周期内,程序会存储闭包中引用的外部函数变量(此时该变量类似于全局变量),直到闭包的生命周期结束。

func main() {

    // 引用闭包时,在这个引用的生命周期内,程序会存储闭包中引用的外部函数变量(此时该变量类似于全局变量)
    aa := append("q")
    fmt.Println(aa("w"))
    fmt.Println(aa("e"))
    fmt.Println(aa("r"))
}

func append(a string) func(b string) string {
    var s = a
    return func(b string) string {
        s = s + b
        return s
    }
}

输出结果:

 2.3 工厂函数

  如果需要创建较多功能类似的函数时,可以通过闭包的形式创建一个工厂函数;

  示例:创建一个给文件名添加不同后缀的工厂函数

func main() {

    suffixTxt := makeAppendSuffix("txt")
    fmt.Println(suffixTxt("a"))
    fmt.Println(suffixTxt("b"))
    suffixMp4 := makeAppendSuffix("mp4")
    fmt.Println(suffixMp4("xx"))
    fmt.Println(suffixMp4("zz"))

}

func makeAppendSuffix(suffix string) func(name string) (totalName string) {
    return func(name string)(totalName string) {
        return name + "." + suffix
    }
}

输出结果:

原文地址:https://www.cnblogs.com/virgosnail/p/12931895.html