Go支持匿名函数/闭包,让我想起Python中的Lambdas,何时在你的代码中使用它们是理想的?
答案 0 :(得分:3)
我认为function literals最有意义的是它们关闭的事实是有用的/使用的。考虑例如:
type handler func()
func HanldeSomething(h handler) {
//...
h()
// ...
}
func Elsewhere() {
var foo int
HandleSomething(handler(func(){
fmt.Println("debug: foo in Elsewhere is", foo)
}))
}
这样,当h
中调用HandleSomething
时,它可以使用Elsewhere
的上下文说/做某事。这在许多情况下都很方便。
答案 1 :(得分:3)
jnml已经给出了一个匿名函数有用的案例。
我将补充说,当你只需要传递一个不会在其他地方调用的函数时,你可以使用它们:
Goroutine发布:
go func() {
...
}()
将一些代码传递给函数:
http.Handle("/ws", websocket.Handler(func(ws *websocket.Conn) {
...