关于golang:golang中的联合体

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理