GOLANG使用嵌入结构实现接口

GOLANG使用嵌入结构实现接口,第1张

概述原文:https://gocn.io/article/332 考虑一个Packet接口,一般会返回一个Header,例如: type PacketHeader struct { ID uint32 Timestamp uint64 }type Packet interface { encoding.BinaryMarshaler encoding.BinaryUnmarshaler Heade

原文:https://gocn.io/article/332

考虑一个Packet接口,一般会返回一个header,例如:

type Packetheader struct @H_403_10@{ ID uint32 Timestamp uint64 }type Packet interface @H_403_10@{ enCoding.BinaryMarshaler enCoding.BinaryUnmarshaler header() *Packetheader }

如果是OO的语言,一般会有一个基类,里面包含了header和实现这个header:

class BasePacket : public Packet {protected:     Packetheader h;public:     virtual header() *Packetheader;};class HandshakePacket : public BasePacket {};

在子类中就都实现了这个header()方法了,在GolANG同样可以做到,通过在header中定义方法,在Packet中包含header就可以。

func (v *Packetheader) header() *Pakcetheader {    return v}type HandshakePacket struct @H_403_10@{ 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}

更高级的可以直接嵌入接口。譬如context.Context的实现,cancelCtx直接嵌入了一个接口:

type cancelCtx struct {    Context

通过指定类型,或者初始化的顺序初始化struct

func newCancelCtx(parent Context) cancelCtx {    return cancelCtx{        Context: parent,done:    make(chan struct{}),}}

结构嵌套的方式,让组合实现起来非常便捷,避免频繁的代理。

总结

以上是内存溢出为你收集整理的GOLANG使用嵌入结构实现接口全部内容,希望文章能够帮你解决GOLANG使用嵌入结构实现接口所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1277950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存