美文网首页
Go语言中的匿名函数

Go语言中的匿名函数

作者: louyang | 来源:发表于2021-06-16 15:17 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Go语言中的匿名函数

          本文链接:https://www.haomeiwen.com/subject/viuxyltx.html