styp := sval.Type().(*reflect.StructType);
// look for field at the top level
- for i := 0; i < styp.NumField(); i++ {
- f := styp.Field(i);
- if f.Name == fieldname {
- return sval.Field(i), 0;
- }
+ if field, ok := styp.FieldByName(fieldname); ok {
+ return sval.Field(field.Index), 0;
}
// look for field in anonymous fields
}
if v, ok := reflect.Indirect(b.val).(*reflect.StructValue); ok {
t := v.Type().(*reflect.StructType);
- for i := 0; i < t.NumField(); i++ {
- if t.Field(i).Name == k {
- return &_StructBuilder{ v.Field(i) }
- }
+ if field, ok := t.FieldByName(k); ok {
+ return &_StructBuilder{ v.Field(field.Index) }
}
// Again, case-insensitive.
for i := 0; i < t.NumField(); i++ {
data := reflect.Indirect(st.data);
typ, ok := data.Type().(*reflect.StructType);
if ok {
- for i := 0; i < typ.NumField(); i++ {
- f := typ.Field(i);
- if f.Name == s {
- return data.(*reflect.StructValue).Field(i)
- }
+ if field, ok := typ.FieldByName(s); ok {
+ return data.(*reflect.StructValue).Field(field.Index)
}
}
return nil