【发布时间】:2018-11-19 09:13:00
【问题描述】:
type BizError struct {
Code string
Mesg string
}
type ApiReply struct {
Err BizError
}
type GetDataReply struct {
Data interface{}
ApiReply
}
有了上面的定义,我想做以下事情:
func Func1(data interface{}) {
switch data.(type) {
case ApiReply:
data.(ApiReply).Err.Code = "0"
}
}
关键问题是在 Func1 中,类型开关不知道嵌入 ApiReply 的任何新类型,它是一个“通用”处理程序。而data
传递给它的实际上是 ApiReply 的“子类”。显然,在 Go 中,您不能将 GetDataReply 类型断言到 ApiReply。
我该如何处理这种情况,以便在 Func1 中我不需要明确声明所有可能嵌入 ApiReply 的结构?
【问题讨论】:
-
@xrfang 这样的事情? play.golang.org/p/IKxIj8XoOLc
-
@mkopriva 是的,这与我想要的很接近
标签: go type-assertion