diff --git a/src/encoding/gob/decode.go b/src/encoding/gob/decode.go index 4ef9ef7243e..f92556f8ab6 100644 --- a/src/encoding/gob/decode.go +++ b/src/encoding/gob/decode.go @@ -625,7 +625,7 @@ func (dec *Decoder) decodeSlice(state *decoderState, value reflect.Value, elemOp if value.Cap() < n { value.Set(reflect.MakeSlice(typ, n, n)) } else { - value.Set(value.Slice(0, n)) + value.SetLen(n) } dec.decodeArrayHelper(state, value, elemOp, n, ovfl, helper) } diff --git a/src/encoding/gob/timing_test.go b/src/encoding/gob/timing_test.go index ceb21c4107b..516aeea92c6 100644 --- a/src/encoding/gob/timing_test.go +++ b/src/encoding/gob/timing_test.go @@ -279,7 +279,13 @@ func BenchmarkDecodeStringSlice(b *testing.B) { } benchmarkDecodeSlice(b, a) } - +func BenchmarkDecodeStringsSlice(b *testing.B) { + a := make([][]string, 1000) + for i := range a { + a[i] = []string{"now is the time"} + } + benchmarkDecodeSlice(b, a) +} func BenchmarkDecodeBytesSlice(b *testing.B) { a := make([][]byte, 1000) for i := range a {