昨天使用protobuf中的oneof发现编译出来的代码挺奇怪的,详细看看发现golang中使用联合体是这样用的
定义一个接口类型,这个接口类型就一个方法,实现了这个方法就可以赋值了。
type msgPayload interface {
msgPayload()
}
要使用联合体的地方使用接口代替
type Message struct {
Payload msgPayload
}
然后就可以分别定义各个结构了,只需要添加定义的空接口就行了
type MsgA struct {
A uint32
}
func (*MsgA) msgPayload() {}
同样使用的时候,定义结构体
msgA := Message{Payload:&MsgA{A: 000}}
读取时候使用
switch msgB.Payload.(type) {
case *MsgA:
fmt.Println("*MsgA")
......
}
有疑问加站长微信联系(非本文作者)