昨天应用 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")
......
}