本文整理汇总了Golang中github.com/davyxu/pbmeta.FieldDescriptor.MessageDesc方法的典型用法代码示例。如果您正苦于以下问题:Golang FieldDescriptor.MessageDesc方法的具体用法?Golang FieldDescriptor.MessageDesc怎么用?Golang FieldDescriptor.MessageDesc使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/davyxu/pbmeta.FieldDescriptor
的用法示例。
在下文中一共展示了FieldDescriptor.MessageDesc方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Value2Struct
func Value2Struct(meta *tool.FieldMetaV1, structValue string, fd *pbmeta.FieldDescriptor, callback func(string, string) bool) (isValue2Struct bool, hasError bool) {
if meta == nil {
return
}
if meta.String2Struct == false {
return
}
if !fd.IsMessageType() {
hasError = true
log.Errorf("%s is not message type", fd.Name())
return
}
msgD := fd.MessageDesc()
if msgD == nil {
hasError = true
log.Errorf("%s message not found", fd.Name())
return
}
p := newLineParser(fd, structValue)
// 匹配顺序从高到低
defer func() {
err := recover()
switch err.(type) {
// 运行时错误
case interface {
RuntimeError()
}:
// 继续外抛, 方便调试
panic(err)
case error:
hasError = true
log.Errorf("field: %s parse error, %v", fd.Name(), err)
default:
isValue2Struct = true
}
}()
p.NextToken()
for {
if p.TokenID() != Token_Identifier {
hasError = true
log.Errorf("expect key in field: %s", fd.Name())
return
}
key := p.TokenValue()
structFD := FieldByNameWithMeta(msgD, key)
// 尝试查找字段定义
if structFD == nil {
hasError = true
log.Errorf("%s field not found ", key)
return
}
p.NextToken()
if p.TokenID() != Token_Comma {
hasError = true
log.Errorf("%s need ':' split value", key)
return
}
p.NextToken()
value := p.TokenValue()
// 按照正常流程转换值
if afterValue, ok := ValueConvetor(structFD, value); ok {
if !callback(key, afterValue) {
hasError = true
return
}
} else {
hasError = true
log.Errorf("%s convert failed", key)
return
}
p.NextToken()
}
//.........这里部分代码省略.........