📜  Go语言中的匿名函数(1)

📅  最后修改于: 2023-12-03 15:01:03.538000             🧑  作者: Mango

Go语言中的匿名函数

Go语言中的匿名函数是一种无需定义函数名的函数,也称为闭包。闭包是一种特殊的函数,它可以访问其外部作用域中的变量。在Go语言中,闭包的语法很简洁,可以很方便地使用。

语法
func() {
    // 函数体
}

上面的语法定义了一个匿名函数,其中func()表示函数的声明,{}中是函数的具体实现。

使用
直接调用

匿名函数可以直接调用,如下所示:

func main() {
    func() {
        fmt.Println("Hello World!")
    }()
}

上面代码中,我们定义了一个匿名函数并直接调用它,在控制台输出Hello World!

作为变量值传递

匿名函数可以被当作变量值传递,如下所示:

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

上面代码中,我们将一个匿名函数赋值给了变量f,然后使用f变量调用匿名函数。

作为其他函数的参数

匿名函数可以被当作其他函数的参数,如下所示:

func main() {
    result := compute(func(x, y int) int {
        return x + y
    }, 1, 2)
    
    fmt.Println(result)
}

func compute(f func(int, int) int, x, y int) int {
    return f(x, y)
}

上面代码中,我们定义了一个compute函数,它接受一个匿名函数作为参数,并在内部调用该函数。

闭包

匿名函数本身并不是闭包,但是当匿名函数引用了外部作用域中的变量时,它就变成了闭包。

func main() {
    x := 1
    
    f := func() {
        fmt.Println(x)
    }
    
    f()
    
    x = 2
    
    f()
}

上面代码中,我们定义了一个匿名函数f,它引用了外部作用域中的变量x。当我们运行程序时,先输出的是1,后输出的是2。这是因为f这个闭包始终引用的是x变量的最新值。

总结

匿名函数是Go语言中非常有用的特性,它可以让我们更方便地编写代码。在使用匿名函数时,需要注意闭包的概念,避免出现闭包捕获变量导致的错误。