]> Cypherpunks repositories - gostls13.git/commitdiff
use FieldByName where possible.
authorRob Pike <r@golang.org>
Fri, 17 Jul 2009 04:24:30 +0000 (21:24 -0700)
committerRob Pike <r@golang.org>
Fri, 17 Jul 2009 04:24:30 +0000 (21:24 -0700)
R=rsc
DELTA=20  (0 added, 12 deleted, 8 changed)
OCL=31758
CL=31758

src/pkg/datafmt/datafmt.go
src/pkg/json/struct.go
src/pkg/template/template.go

index 9b2d4dfb093f0f2e29978d82eeacb31b97020a69..be5575d57c4d0a377e0863d5205ff7f1364491de 100644 (file)
@@ -423,11 +423,8 @@ func getField(val reflect.Value, fieldname string) (reflect.Value, int) {
        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
index 81887b1c80c899d7302759004395f09a4c90be65..ee23d1e9dd83daa948a066380da4619916d04f94 100644 (file)
@@ -184,10 +184,8 @@ func (b *_StructBuilder) Key(k string) Builder {
        }
        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++ {
index 6db58442ac73fa43d18628396bc3b5e1902bd29c..7c38b778fc8859167091a5fd493f15dc664b8e1d 100644 (file)
@@ -571,11 +571,8 @@ func (st *state) findVar(s string) reflect.Value {
        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