4

Go 支持匿名函数/闭包,这让我想起了 Python 中的 Lambda,什么时候在你的代码中使用它们比较理想?

4

2 回答 2

3

jnml 已经给出了匿名函数有用的一种情况。

我要补充一点,当您只需要传递一个不会在其他地方调用的函数时,您可以使用它们:

Goroutine 启动:

go func() {
    ...
}()

将一些代码传递给函数:

http.Handle("/ws", websocket.Handler(func(ws *websocket.Conn) {
  ...
于 2012-12-15T09:47:52.460 回答
3

我认为函数文字最有意义,因为它们是闭包的事实是有用/使用的。考虑例如:

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. 这在很多情况下都很方便。

于 2012-12-15T09:34:56.867 回答