GOLANG使用嵌入结构实现接口
发布时间:2020-12-16 19:11:59 所属栏目:大数据 来源:网络整理
导读:原文:https://gocn.io/article/332 考虑一个Packet接口,一般会返回一个Header,例如: type PacketHeader struct { ID uint32 Timestamp uint64 } type Packet interface { encoding . BinaryMarshaler encoding . BinaryUnmarshaler Header () * PacketHe
原文:https://gocn.io/article/332 考虑一个Packet接口,一般会返回一个Header,例如: type PacketHeader struct { ID uint32 Timestamp uint64 }
type Packet interface { encoding.BinaryMarshaler encoding.BinaryUnmarshaler Header() *PacketHeader }
如果是OO的语言,一般会有一个基类,里面包含了Header和实现这个Header: class BasePacket : public Packet {
protected:
PacketHeader h;
public:
virtual Header() *PacketHeader;
};
class HandshakePacket : public BasePacket {
};
在子类中就都实现了这个 func (v *PacketHeader) Header() *PakcetHeader {
return v
}
type HandshakePacket struct { PacketHeader }
看起来还差不多的,都可以实现,golang只是代码少一点,清晰一点点而已。考虑要添加一些辅助函数,譬如给Packet添加是否是紧急类型的包,那OO语言得做一次代理: type Packet interface {
IsErgency() bool
}
class BasePacket {
public:
bool IsErgency() {
return h.realtime < 3;
}
}
而在GOLANG中,只需要在Header实现就好了: func (v *PacketHeader) IsErgency() bool {
return v.realtime < 3
}
更高级的可以直接嵌入接口。譬如 type cancelCtx struct {
Context
通过指定类型,或者初始化的顺序初始化 func newCancelCtx(parent Context) cancelCtx {
return cancelCtx{
Context: parent,done: make(chan struct{}),}
}
结构嵌套的方式,让组合实现起来非常便捷,避免频繁的代理。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |