我正在 Go 中实现一个消息传递系统。所以我有一个名为Msg. 该Msg接口定义了许多公共字段,例如源、目标、发送时间、接收时间等。我无法定义 s 的完整列表,Msg因为我希望库用户定义Msgs 的具体类型。
要提供具体的 类型Msg,用户需要实现大量的 getter 和 setter,这非常烦人。
我尝试过的一种解决方案是提供一个简单的基类,MsgBase并定义所有公共属性以及 getter 和 setter。对于 的每个具体类型Msg,我都嵌入了一个指向 的指针MsgBase。该解决方案有效。
但是,我想MsgBase在具体Msg类型中嵌入一个值版本。这是因为这样的Msgs 在执行过程中创建了太多次,动态分配 aMsgBase会增加垃圾收集开销。我真的希望所有的Msgs 都是静态分配的,因为它们由组件传递并且永远不应该共享。如果我使用 的值版本MsgBase,则无法使用 中定义的设置器MsgBase。
我想知道这个问题是否有任何简单的解决方案?
编辑:添加示例代码
type Msg interface {
// Agent is another interface
Src() Agent
SetSrc(a Agent)
Dst() Agent
SetDst(a Agent)
... // A large number of properties
}
type MsgBase struct {
src, dst Agent
... // Properties as private fields.
}
func (m MsgBase) Src() Agent {
return m.src
}
func (m *MsgBase) SetSrc(a Agent) {
m.src = a
}
... // Many other setters and getters for MsgBase
type SampleMsg struct {
MsgBase // option1
*MsgBase // option2
}
呼如林
相关分类