interface {}进行函数类型转换

stan.sm:

我是Go的新手,并且几乎每天都在与这个问题作斗争。

考虑到我有这些:

type HandlerType func()
var object interface{}
var typedObject HandlerType

可以像这样为typedObject变量分配一个函数:

typedHandler = func() {
    fmt.Println("in a handler!\n")
}

但是我需要做的是将该处理程序函数作为interface {}变量传递,然后以某种方式将其转换为HandlerType,我以后可以调用

我已经尝试过了,但是它抛出一个错误:

typedHandler = object.(HandlerType)

结果是:

接口转换:接口是func(),不是main.HandlerType

基本上,我需要在注册之前使用其他签名注册函数而无需进行其他类型转换。因此,不要这样做:

registerHandler(HandlerTypeString(func() string { ... }))
registerHandler(HandlerTypeVoid(func() { ... }))

我想这样注册处理程序:

registerHandler(func() string { ... })
registerHandler(func() { ... })

..而且我不想在稍后的处理程序调用时涉及反射

可能吗?

编辑:我创建了一个游乐场:http : //play.golang.org/p/UlwqkHjt_P

因此,据我所知,没有办法将某些任意函数作为interface {}传递,然后以某种方式将其转换为HandlerType或其他一些预定义的函数类型,这样我就可以在不使用反射的情况下调用它了?

Edit2:我想出了以下解决方案:http : //play.golang.org/p/4gUxsgmiPf

使用此代码在运行时不应有任何性能损失。但是,有人可以考虑不使用接口{}来实现此功能的另一种方法吗?

OneOfOne:

你不能,这是一个不同的类型,你可以只使用object.(func())object.(func() string)等等。

func main() {
    type HandlerType func()
    var object interface{} = func() {
        fmt.Println("eureka!")
    }
    if f, ok := object.(func()); ok {
        HandlerType(f)()
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从golang中的interface {}进行正确的类型转换后,类型断言失败

如何使用golang中的函数将interface {}值转换为静态类型的值?

如何在interface {}变量上进行类型断言以测试其是否为函数?

将interface {}转换为[] interface {}

将interface {}转换为特定类型

进行反思恐慌:使用interface {}作为类型进行呼叫

编写函数以进行类型转换

在通用Swift函数中进行类型转换

[] interface {}的元素类型

无法将类型'Task <Derived>'转换为'Task <Interface>'

在函数内设置类型为空 interface{} 的变量的值

如何为go中接受interface {}的函数创建类型条件?

将[] interface {}转换为非可变函数的参数

通过反射将类型“ interface {}”转换为类型“ interface {}”的切片中的另一个接口

无法从[[] interface {}`断言类型[[] string`

将interface {}转换为int

将结构转换为* interface {}

如何从[] interface {}转换为[] int?

将[] string转换为[] interface {}

在 Java 8 中使用 map 函数无法进行类型转换

调用接受“ chan interface {}”的函数

使用map [string] int作为map [interface {}] interface {}类型的参数

接口转换:interface {}是float64而不是[] interface {} PubNub

在go中将变量[] interface {}转换为变量... interface {}

将map [interface {}] interface {}转换为map [string] string

无法将[] interface {}转换为[] byte:“ interface {}是[] interface [],而不是[] uint8”

进行类型转换

dynamodbattribute.UnmarshalMap将我的变量类型转换为map [string] interface {}

转到:强制转换类型无法将map [string] interface {}映射到map [string] string