【问题标题】:Pass a function body/defintion as parameter to a function call in golang将函数体/定义作为参数传递给golang中的函数调用
【发布时间】:2017-03-07 11:09:38
【问题描述】:

我最近在使用 golang 时遇到了以下问题。是否可以将函数体传递给函数调用,例如 javascript。 例如setTimeout(function(i){console.log("input:", i)}, 1000).

在 javascript 中将匿名函数传递给另一个函数是很常见的。我想知道在go中是否相同?

package main

import (
    "fmt"
)

type HandlerFunc func(int)

func main() {
    // define a function as object/variable?
    hnd := func(in int){
        fmt.Println("func handler returns input", in);
    }
    a:=HandlerFunc(hnd) //pass function object/variable to type HandlerFunc
    a(10)

    // pass function body directly to type HandlerFunc
    b:=HandlerFunc(func(_in int){
        fmt.Println("another func handler returns input", _in);
    })
    b(100)

    fmt.Println("Hello, playground")
}

它们都有效,但我想知道这两种用途之间是否有任何区别,哪一种更可取?

【问题讨论】:

  • 您没有在代码中传递函数,您只是将函数值存储在局部变量中,然后您调用。请参阅此相关问题:First class functions in Go
  • 没什么区别。
  • 谢谢@icza。我觉得应该没什么区别,但我的一位同事似乎不这么认为。我很好奇的是,我在网上找不到任何用第二种风格编写的代码,而它在 Javascript 中很常见(几周前我刚从 Javascript 切换到 Golang)。此外,Golang 的规范中没有提到堆和栈,看起来 Golang 很聪明,可以动态分配内存,让用户不会像 c/c++ 那样关心内存泄漏。我说的对吗?

标签: function go parameter-passing


【解决方案1】:

没有区别,选择更适合自己风格的吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2014-08-18
    • 2021-04-13
    • 1970-01-01
    • 2017-03-15
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多