У меня есть две идентичные структуры, которые в целях устранения неоднозначности имеют разные типы:
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
.