如何编写Golang匿名函数_Golang匿名函数语法说明

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

Go语言中的匿名函数就是没有名字的函数,可以直接定义并使用,常用于回调、闭包或作为参数传递给其他函数。

基本语法格式

匿名函数的定义形式和普通函数类似,只是省略了函数名:

func(参数列表) 返回类型 {
    // 函数体
}

例如,定义一个接收两个整数并返回其和的匿名函数:

func(a, b int) int {
    return a + b
}

立即调用匿名函数(IIFE)

定义后紧跟括号即可立即执行:

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.Slicehttp.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里轻量灵活,关键在于理解它和变量、作用域、闭包的关系,用对了能写出更简洁清晰的代码。