Go语言中的匿名函数

2021-06-16  本文已影响0人  louyang

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

上一篇下一篇

猜你喜欢

热点阅读