]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/gob: make encoding structs a little faster
authorRob Pike <r@golang.org>
Wed, 15 Oct 2014 03:03:35 +0000 (20:03 -0700)
committerRob Pike <r@golang.org>
Wed, 15 Oct 2014 03:03:35 +0000 (20:03 -0700)
FieldByIndex never returns an invalid Value, so the validity
test can be avoided if the field is not indirect.

BenchmarkGobEncode     12768642      12424022      -2.70%
BenchmarkGobEncode     60.11        61.78        1.03x

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/158890045

src/encoding/gob/encode.go

index b7bf8b0022f630909a6d5d791e39e8bbee98d5e8..04a85410c6e233394eff90beef740e9691857deb 100644 (file)
@@ -281,15 +281,16 @@ func (enc *Encoder) encodeStruct(b *bytes.Buffer, engine *encEngine, value refle
                field := value.FieldByIndex(instr.index)
                if instr.indir > 0 {
                        field = encIndirect(field, instr.indir)
-               }
-               if !valid(field) {
-                       continue
+                       // TODO: Is field guaranteed valid? If so we could avoid this check.
+                       if !valid(field) {
+                               continue
+                       }
                }
                instr.op(instr, state, field)
        }
 }
 
-// encodeArray encodes the array whose 0th element is at p.
+// encodeArray encodes an array.
 func (enc *Encoder) encodeArray(b *bytes.Buffer, value reflect.Value, op encOp, elemIndir int, length int) {
        state := enc.newEncoderState(b)
        defer enc.freeEncoderState(state)
@@ -300,6 +301,7 @@ func (enc *Encoder) encodeArray(b *bytes.Buffer, value reflect.Value, op encOp,
                elem := value.Index(i)
                if elemIndir > 0 {
                        elem = encIndirect(elem, elemIndir)
+                       // TODO: Is elem guaranteed valid? If so we could avoid this check.
                        if !valid(elem) {
                                errorf("encodeArray: nil element")
                        }