🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 匿名函数即没有名字的函数,常用于实现回调函数、闭包等应用。 [TOC] ## 直接调用 ~~~ func() { fmt.Printf("func 1\n") }() // 有参数的情况下,后面是传入对应的参数 func(x int) { fmt.Printf("x is %d\n", x) }(3) ~~~ ## 将匿名函数赋值给变量 ~~~ // 定义一个闭包,并将闭包函数赋值给变量f1、f2 num := 0 //var f1 func() var f2 func(x int, y int) int f1 := func() { // 只直接引用上下文环境 num ++ } f2 = func(x int, y int) int { return x+y } // 执行结果 f1() f1() fmt.Println(num) total := f2(2,3) fmt.Println(total) ~~~ ## 将匿名函数用作回调函数 ~~~ package main import "fmt" func main() { //调用函数,对每个元素后面都加上a标识 arr := []string{"1", "2", "3"} fmt.Println(visit(arr, func(v string) string { v += "a" return v })) //调用函数,对每个元素后面都加上b标识 fmt.Println(visit(arr, func(v string) string { v += "b" return v })) } //定义一个函数,遍历切片元素,对每个元素进行处理 func visit(list []string, f func(string) string) string { str := "" for _, value := range list { str += f(value) } return str } ~~~ > 运行结果 ~~~ 1a2a3a 1b2b3b ~~~ ## 将匿名函数作为闭包 > 一个函数和与其相关的引用环境结合组成的实体 ~~~ package main import "fmt" func main() { var f = Adder() fmt.Println(f(1), "-") fmt.Println(f(20), "-") fmt.Println(f(300), "-") } func Adder() func(int) int { var x = 0 return func(delta int) int { x += delta return x } } ~~~ > 运行结果 ~~~ 1 - 21 - 321 - ~~~