何时在Go中使用匿名函数?

时间:2012-12-15 09:11:14

标签: closures go

Go支持匿名函数/闭包,让我想起Python中的Lambdas,何时在你的代码中使用它们是理想的?

2 个答案:

答案 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) {
  ...