Go语言中的匿名函数

1 什么是匿名函数

在Go语言中,不需要函数名的函数,称为匿名函数。例如正常的函数sayHello()是这样的:

package main

import "fmt"

func sayHello() {
    fmt.Println("Hello!")
}

func main() {
    sayHello();
}

匿名函数是这样的:

package main

import "fmt"

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

正常函数的语法是:

func function_name(parameter_list) (return_type) {
    // code..
}

而匿名函数的语法则少了function_name

func (parameter_list) (return_type) {
    // code..
}

有一点要注意的是,上面是声明了一个匿名函数,而下面价格小括号则是调用匿名函数:

func (parameter_list) (return_type) {
    // code..
} ()

匿名函数可以有入参,例如:

package main

import "fmt"

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

2 匿名函数可以做为值赋给一个变量

package main

import "fmt"

func main() {
    vari := func() {
        fmt.Println("Hello!")
    }
    vari()
}

既然匿名函数可以是一个值,那么匿名函数就可以做为函数的入参和返回值。

下面这个例子是匿名函数成为了另一个函数的入参:

package main

import "fmt"

func do(action func()) {
    action()
}

func main() {
    say_hello := func() {
        fmt.Println("Hello!")
    }
    do(say_hello)
}

下面这个例子是匿名函数成为了另一个函数的返回值:

package main

import "fmt"

func get_action() func() {
    return func() {
        fmt.Println("Hello!")
    }
}

func main() {
    action := get_action()
    action()
}

参考

https://www.geeksforgeeks.org/anonymous-function-in-go-language/
https://www.programmersought.com/article/67192338855/
https://www.bogotobogo.com/GoLang/GoLang_Closures_Anonymous_Functions.php

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容