Go
Go loader 使用指南。
API
Data
func Data() *ProtobufMessage
获取内部 protobuf message 数据。
Map
func GetN(k1 KEY1, k2 KEY2...) (*MapValueType, error)
获取第 N 层 map 的值。注意:仅适用于每层 message 的第一个 map 字段。
OrderedMap
前置条件:需要在 metasheet 中将
OrderedMap选项设置为true。
func GetOrderedMapN(k1 KEY1, k2 KEY2...) (*OrderedMapValueType, error)
获取第 N 层有序 map 的值。注意:仅适用于每层 message 的第一个 map 字段。
Index
前置条件:需要在 metasheet 中适当设置
Index选项。
若 index 名称为 Chapter,则访问器为:
func FindChapterMap() *Index_ChapterMap:获取整个 hash map。func FindChapter(k1 KEY1, k2 KEY2...) []*ParentType:按 key 查找值。一个 key 可能对应多个值,以 slice 形式返回。func FindFirstChapter(k1 KEY1, k2 KEY2...) *ParentType:按 key 查找第一个值。
OrderedIndex
前置条件:需要在 metasheet 中适当设置
OrderedIndex选项。
若有序 index 名称为 Chapter,则访问器为:
func FindChapterMap() *OrderedIndex_ChapterMap:获取整个有序 map。func FindChapter(k1 KEY1, k2 KEY2...) []*ParentType:按 key 查找值。一个 key 可能对应多个值,以 slice 形式返回。func FindFirstChapter(k1 KEY1, k2 KEY2...) *ParentType:按 key 查找第一个值。
自定义 messager
如果内置 API 不能满足业务逻辑需求,可以添加自定义 messager,在其中编写基于已加载配置对象的预处理逻辑。
示例:go-tableau-loader/customconf
custom_xxx_conf.go:
type CustomXXXConf struct {
tableau.UnimplementedMessager
// TODO: add custom data fields.
}
func (x *CustomItemConf) Name() string {
return "CustomXXXConf"
}
func (x *CustomItemConf) ProcessAfterLoadAll(hub *tableau.Hub) error {
// TODO: implement here.
return nil
}
func init() {
tableau.Register(func() tableau.Messager {
return new(CustomXXXConf)
})
}
插件:protoc-gen-go-tableau-loader
使用此 protoc 插件的示例: go-tableau-loader/gen.sh。