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
网友评论