将 func 类型转换为其他 func 类型



我有一些工人。我不想通过我的包传播源类型,而是传播到用户界面。因此,我有:

package package_one
type T func(map[string]interface{}) interface{}
func Func(f T) {
package_two.Func(f)
}
package package_two
...
type T func(map[string]interface{}) interface{}
func Func(f T) {
fmt.Printf("%v", f(nil))
}
...
package main
func main() {
package_one.Func(func(m map[string]interface{}) interface{} {
return "result"
})
}

package_one.Func()调用package_two.Func()时,我收到错误。我假设尽管签名相等,编译器不会将package_one.Tpackage_two.T视为同一类型。为什么会这样?我想避免运行时强制转换和检查结果,因为它很冗长并且需要错误处理。如果我可以在编译阶段将其定义为相同的类型,生活可能会更容易。可能吗?

使用表达式package_two.T(f)转换值。 此转换不会产生运行时成本。转换没有要检查的错误。

package package_one
import "play.ground/package_two"
type T func(map[string]interface{}) interface{}
func Func(f T) {
package_two.Func(package_two.T(f))
}

在操场上运行它。 https://play.golang.org/p/3umm81iNAjk

最新更新