Go语言中匿名函数是无名函数,可直接定义使用,常用于回调、闭包或传参;支持立即调用(IIFE)、赋值变量、作为参数或返回值。

Go语言中的匿名函数就是没有名字的函数,可以直接定义并使用,常用于回调、闭包或作为参数传递给其他函数。
基本语法格式
匿名函数的定义形式和普通函数类似,只是省略了函数名:
func(参数列表) 返回类型 {// 函数体
}
例如,定义一个接收两个整数并返回其和的匿名函数:
func(a, b int) int {return a + b
}
立即调用匿名函数(IIFE)
定义后紧跟括号即可立即执行:
立即学习“go语言免费学习笔记(深入)”;
func() {fmt.Println("Hello from anonymous func!")
}() // 注意末尾的 ()
带参数的立即调用写法:
func(x string) {fmt.Println("Hi,", x)
}("Gopher")
赋值给变量并调用
把匿名函数赋给一个变量(该变量类型是函数类型),之后像普通函数一样调用:
add := func(a, b int) int {return a + b
}
result := add(3, 5) // result = 8
注意:变量类型由匿名函数签名自动推导,无需显式声明函数类型(除非需要传参或做类型约束)。
作为参数传递或返回值
匿名函数可直接作为参数传入其他函数,比如用在 sort.Slice 或 http.HandleFunc 中:
numbers := []int{3, 1, 4}sort.Slice(numbers, func(i, j int) bool {
return numbers[i] })
也可作为函数返回值(构成闭包):
func makeAdder(base int) func(int) int {return func(x int) int {
return base + x
}
}
plus5 := makeAdder(5)
fmt.Println(plus5(3)) // 输出 8
基本上就这些。匿名函数在Go里轻量灵活,关键在于理解它和变量、作用域、闭包的关系,用对了能写出更简洁清晰的代码。










