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

时间:2020-05-17 12:05:43

标签: go casting

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

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视为同一类型。为什么会发生?我想避免运行时强制转换并检查结果,因为它很冗长并且需要错误处理。如果我可以在编译阶段将其定义为相同的类型,则生活可能会更轻松。有可能吗?

1 个答案:

答案 0 :(得分:2)

Convert使用表达式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