go - 将变量分配给“标签”类型,或如何在指针之间进行类型转换
问题描述
我有两个相同的结构,为了消除歧义,它们有不同的类型:
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
inside BaseType
。
解决方案
推荐阅读
- css - css 打印媒体布局,带有标题和从上到下流动的两列布局
- c# - 如何使我的机器人列表服务器位于其中?
- c++ - 初始化列表初始化的类 std::array 成员变量
- arrays - Swift 是否有任何简单的方法来获取二维数组中的列?
- java - 通过 Spring Boot 调用 AirTable Rest API 返回 401
- python - 如何将一个变量值嵌入到另一个变量中?
- android - 无法在 Fragment 的 onCreateView 方法中更改 TextView 的文本
- excel - 从 VBA 类中的数组成员中获取对象
- powerbi - 按国家/地区划分的节假日 Power BI 工作时数
- javascript - 多个请求之间有 for 循环和超时