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

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


type mapFunc func(value int) int

你可以使用这种类型来声明一个函数而不复制它吗?就像是:


doubleIt := mapFunc {

    return 2*value

}


郎朗坤
浏览 246回答 2
2回答

隔江千里

据我所知,最短的方法仍然是:doubleIt := func (value int) int {    return value * 2}所以它并没有变得更短,而且我认为将函数签名与其主体分离不会更具可读性。声明命名的 func 类型的好处是在其他声明中使用它。doubleId := mapFunc(func...)由于类型标识规则,不需要额外的转换:如果两个函数类型相同,则它们具有相同数量的参数和结果值,对应的参数和结果类型相同,并且两个函数都是可变参数或两者都不是。参数和结果名称不需要匹配。

牧羊人nacy

当然,您可以像任何其他预先声明的类型一样func是一流的类型,尽管以这种方式声明它没有多大意义:package mainimport "fmt"// You need not a named argument for a named typetype mapFunc func(int) intfunc main() {        doubleIt := mapFunc(func(value int) int { return value * 2})        fmt.Println(doubleIt(2))      // 4}这是为了说明函数只是 Go 中的另一种类型,可以像任何其他命名类型一样对待。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go