如何在GO中使用函数类型声明函数

时间:2015-02-21 19:36:44

标签: syntax go

假设您声明了一个函数类型

type mapFunc func(value int) int

你可以使用这种类型声明一个函数而不重复它吗?类似的东西:

doubleIt := mapFunc {
    return 2*value
}

2 个答案:

答案 0 :(得分:4)

据我所知,最短路仍然是:

doubleIt := func (value int) int {
    return value * 2
}

所以它没有变得更短,我不认为将功能签名与其身体分离会更具可读性。声明命名的func类型的好处是在其他声明中使用它。

由于type identity规则:

,因此不需要doubleId := mapFunc(func...)之类的额外转化
  

如果两个函数类型具有相同数量的参数和结果值,相应的参数和结果类型相同,并且两个函数都是可变参数或两者都不是,则它们是相同的。参数和结果名称不需要匹配。

答案 1 :(得分:1)

当然,func类似first-class类似于任何其他预先声明的类型,但以这种方式声明它并不合理:

package main

import "fmt"

// You need not a named argument for a named type
type mapFunc func(int) int

func main() {
        doubleIt := mapFunc(func(value int) int { return value * 2})
        fmt.Println(doubleIt(2))      // 4
}

这是为了说明该函数只是Go中的另一种类型,可以像任何其他命名类型一样对待。