如何在golang中实例化函数类型?

时间:2018-10-21 10:51:43

标签: go

我想实例化一堆相同类型的函数,而不必重复它们的签名。我已经有一个描述该签名的函数类型(下面的fancyFunc)和另一个使用这种参数的函数(下面的doFancyStuff)。我将如何做这样的工作?

package main

import "fmt"

type fancyFunc func(a,b,c int) int

func doFancyStuff(f FancyFunc) int {
    // Do something special with f
    return 42
}

func main() {
    // This works but is rather tedious:
    f1 := func(a,b,c int) int { return a + b + c }

    // I would like to create them like this:
    f2 := fancyFunc{ return a * b * c }

    // Eventually, they are used like this:
    fmt.Println(doFancyStuff(f1))
    fmt.Println(doFancyStuff(f2))
}

1 个答案:

答案 0 :(得分:5)

您只能像在f1情况下那样进行操作,或者通过定义常规函数来进行操作。没有像f2这样的方式。在C语言中,人们使用宏来执行此操作,但是Go没有预处理器(可以使用一些非官方的预处理器)。