optimize: field.ReflectValueOf
This commit is contained in:
parent
52b4744410
commit
73a02efe43
@ -514,12 +514,19 @@ func (field *Field) setupValuerAndSetter(modelType reflect.Type) {
|
|||||||
// ReflectValueOf returns field's reflect value
|
// ReflectValueOf returns field's reflect value
|
||||||
switch {
|
switch {
|
||||||
case len(field.StructField.Index) == 1 && fieldIndex >= 0:
|
case len(field.StructField.Index) == 1 && fieldIndex >= 0:
|
||||||
field.ReflectValueOf = func(ctx context.Context, value reflect.Value) reflect.Value {
|
field.ReflectValueOf = func(ctx context.Context, v reflect.Value) reflect.Value {
|
||||||
return reflect.Indirect(value).Field(fieldIndex)
|
v = reflect.Indirect(v)
|
||||||
|
if v.Type() != modelType {
|
||||||
|
return v.FieldByName(field.Name)
|
||||||
|
}
|
||||||
|
return v.Field(fieldIndex)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
field.ReflectValueOf = func(ctx context.Context, v reflect.Value) reflect.Value {
|
field.ReflectValueOf = func(ctx context.Context, v reflect.Value) reflect.Value {
|
||||||
v = reflect.Indirect(v)
|
v = reflect.Indirect(v)
|
||||||
|
if v.Type() != modelType {
|
||||||
|
return v.FieldByName(field.Name)
|
||||||
|
}
|
||||||
for idx, fieldIdx := range field.StructField.Index {
|
for idx, fieldIdx := range field.StructField.Index {
|
||||||
if fieldIdx >= 0 {
|
if fieldIdx >= 0 {
|
||||||
v = v.Field(fieldIdx)
|
v = v.Field(fieldIdx)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user