如何使用相同的签名转换函数类型?

问题描述:

在一个包,我有这样的:如何使用相同的签名转换函数类型?

package pkg1 

type SomeFuncType func (a interface{}, b interface{}) int 

func PkgApiCall (x SomeFuncType) { 
    ... 
} 

在我的代码使用这个包,我有一些非常相似:

type MyFuncType func (a interface{}, b interface{}) int 

现在我想打电话pkg1.PkgApiCall(),但随着MyFuncType变量作为参数:

package mypackage 

func doingSomeThing(x MyFuncType) { 
    pkg1.PkgApiCall(x) 
} 

它不编译。我得到错误

./src1.go:97:7: error: incompatible type in initialization (cannot use type mypackage.MyFuncType as type pkg1.SomeFuncType) 

我怎么能克服这个?这些函数类型使用完全相同的签名来定义函数。

通常的类型转换为函数类型一样好,因为他们的工作对非函数类型:

pkg1.PkgApiCall(SomeFuncType(x))