【发布时间】:2019-07-19 08:20:53
【问题描述】:
在 Golang 中可以做这样的事情吗?
package main
import "fmt"
type myFunType func(x int) int
var myFun myFunType = myFunType { return x } // (1)
func doSomething(f myFunType) {
fmt.Println(f(10))
}
func main() {
doSomething(myFun)
}
换句话说,是否可以使用函数类型别名来声明函数类型变量,而无需重复签名? 或者,有没有办法在创建函数类型的变量时不总是重新键入整个函数签名?
上面的代码示例,我希望它等同于下面的代码示例(将(1) 行替换为(2) 行),导致编译错误syntax error: unexpected return, expecting expression。
package main
import "fmt"
type myFunType func(x int) int
var myFun myFunType = func(x int) int { return 2 * x } // (2)
func doSomething(f myFunType) {
fmt.Println(f(10))
}
func main() {
doSomething(myFun)
}
【问题讨论】:
-
从不同的角度解决这个问题:如果您有一系列功能都使用相同的签名,并且您担心必须一遍又一遍地输入,也许是时候封装它了进入一个结构并编写接受该结构作为接收者的方法?
-
你的意思是把函数的参数封装成一个结构体?是的,那将是一个有效的替代方案。
标签: function go type-alias