我有两个相同的结构,为了消除歧义,它们具有不同的类型:
type BaseType struct {
id uint64
name string
}
type LabeledType1 BaseType
type LabeledType2 BaseType
整个链中有一个实际上并不关心LabeledType
的函数,它仅与BaseType
一起工作(因为两者都完全相同)。事件的发送者必须发送标记的类型,而不是基本类型,因为实际的类型定义了某些后期行为。
func handle(evt interface{}) error {
switch e := evt.(type) {
case *LabeledType1:
return handleBaseEvent(e)
case *LabeledType2:
return handleBaseEvent(e)
//there are other types
case *OtherType:
return handleOtherType(e)
}
}
func handleBaseEvent(evt *BaseType) {
//do stuff
}
现在当然不能编译:
cannot convert e (type *LabeledType1) to type BaseType
但是我不知道,就我所知,这两种类型都是可分配的,因此应该进行一些简单的转换吗?我尝试过类型转换:
evt.(BaseType)
)
还有
BaseType(e)
我不能在bool
内使用BaseType
。
答案 0 :(得分:5)
使用(*BaseType)()
type conversion将*LabeledType1
和*LabeledType2
转换为*BaseType
:
func handle(evt interface{}) error {
switch e := evt.(type) {
case *LabeledType1:
return handleBaseEvent((*BaseType)(e))
}
...
}