func parseStruct(fd *model.FieldDescriptor, value string, fileD *model.FileDescriptor, node *model.Node) bool { p := newStructParser(value) // 检查字段有没有重复 fieldByFD := make(map[*model.FieldDescriptor]bool) return p.Run(fd, func(key, value string) bool { bnField := fd.Complex.FieldByValueAndMeta(key) if bnField == nil { log.Errorf("%s, '%s'", i18n.String(i18n.StructParser_FieldNotFound), key) return false } if _, ok := fieldByFD[bnField]; ok { log.Errorf("%s, '%s'", i18n.String(i18n.StructParser_DuplicateFieldInCell), key) return false } fieldByFD[bnField] = true // 添加类型节点 fieldNode := node.AddKey(bnField) // 在类型节点下添加值节点 _, ok := ConvertValue(bnField, value, fileD, fieldNode) return ok }) }