在 Go 中将函数调用作为参数传递
在 Go 中,像 go 和 defer 这样的关键字需要函数调用作为参数。虽然这种用法没有指定类型,但我们可以利用各种技术来实现类似的结果。
使用函数变量/值
我们可以定义一个函数类型的变量并为其分配一个函数。这允许我们像存储在变量中一样调用函数。
<code class="go">func myFunc() { fmt.Println("hi") } func main() { var f func() f = myFunc f() // This calls myFunc }</code>
用参数包装函数调用
为了容纳带参数的函数调用,我们可以将调用包装在函数中并传递包装后的函数。
<code class="go">func launch(f func()) { fmt.Println("Before launch") go func() { defer fmt.Println("After completion") f() }() }</code>
我们可以按如下方式使用它:
<code class="go">func main() { launch(func() { fmt.Println("Hello, playground") }) time.Sleep(time.Second) }</code>
自动参数保存的帮助函数
对于特定的函数类型,我们可以创建辅助函数来提供自动参数保存。这些辅助函数与原始函数具有相同的签名,并返回一个无参数函数。
对动态函数使用反射
使用反射,我们可以动态调用函数,而不需要手动副本。但是,它比其他方法更慢且类型安全性较差。
方法值
保存接收者对象副本的方法值是一个例外,其中自动可以保存参数。可以在不直接调用方法的情况下使用方法值。
虽然 Go 缺乏函数调用的特定类型,但这些技术提供了多种将函数调用作为参数传递的方法,包括使用参数或自动参数保存。
以上是如何在 Go 中将函数调用作为参数传递?的详细内容。更多信息请关注PHP中文网其他相关文章!