Problem
Cost of hub.GetHub().GetXXXConf() includes two parts:
- Access a Messager from map:MessagerMap
- Type Assertion
We want to avoid the cost to speed-up messager accessing.
|
// Auto-generated getters below |
|
|
|
func (h *Hub) GetHeroConf() *HeroConf { |
|
msger := h.GetMessager("HeroConf") |
|
if msger != nil { |
|
if conf, ok := msger.(*HeroConf); ok { |
|
return conf |
|
} |
|
} |
|
return nil |
|
} |
Solution
// messagerContainer holds all messagers as named fields in struct for fast access.
type messagerContainer struct {
MessagerMap MessagerMap
LoadedTime time.Time
// all messagers as fields for fast access
HeroConf *HeroConf
...
}
// Hub is the messager manager.
type Hub struct {
messagerContainer atomic.Pointer[MessagerContainer]
opts *Options
}
func (h *Hub) GetHeroConf() *HeroConf {
return h.messagerContainer.Load().HeroConf
}
NOTE:
- How to process custom messagers? just access custom messager from
MessagerMap as before.
Problem
Cost of
hub.GetHub().GetXXXConf()includes two parts:We want to avoid the cost to speed-up messager accessing.
loader/test/go-tableau-loader/protoconf/loader/hub.pc.go
Lines 216 to 226 in 1f6dc42
Solution
NOTE:
MessagerMapas before.