在查看google plus sign in时,我发现了一个非常有趣的模式。这是一个简单的例子(live)。
package main
import(
"fmt"
)
type FuncType func(i int) int
func (fn FuncType) MultiplyByTwo(i int) int{
return fn(i) * 2
}
func MultiplyByThree(i int) int{
return i * 3
}
func main(){
fn := FuncType(MultiplyByThree)
fmt.Println("returns 2 * 3 * 5: ",fn.MultiplyByTwo(5))
}
我的问题很简单,我们怎么能用括号启动FuncType?我不明智!
感谢。
答案 0 :(得分:4)
转换是T(x)形式的表达式,其中T是一个类型,x是可以转换为T类型的表达式。
所以,
fn := FuncType(MultiplyByThree)
FuncType
是一种类型。 MultiplyByThree
是指向函数(表达式)的指针,其签名与FuncType
相同。因此,它可以转换为这种类型。
返回5 * 3 * 2:30
这是正确的乘法序列。 :)