Skip to content

Commit 050d839

Browse files
bpowersrobpike
authored andcommitted
gob: register more slice types
Without explicitly registering slice types, gob fails to encode map[string]interface{} instances where the value is a slice, failing with a message such as: gob: type not registered for interface: []string Fixes #2065. R=golang-dev, gri, r CC=golang-dev https://golang.org/cl/4672056
1 parent d360e02 commit 050d839

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

src/pkg/gob/encoder_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,3 +549,32 @@ func TestMapBug1(t *testing.T) {
549549
t.Errorf("mismatch: %v %v", in, out)
550550
}
551551
}
552+
553+
func TestGobMapInterfaceEncode(t *testing.T) {
554+
m := map[string]interface{}{
555+
"up": uintptr(0),
556+
"i0": []int{-1},
557+
"i1": []int8{-1},
558+
"i2": []int16{-1},
559+
"i3": []int32{-1},
560+
"i4": []int64{-1},
561+
"u0": []uint{1},
562+
"u1": []uint8{1},
563+
"u2": []uint16{1},
564+
"u3": []uint32{1},
565+
"u4": []uint64{1},
566+
"f0": []float32{1},
567+
"f1": []float64{1},
568+
"c0": []complex64{complex(2, -2)},
569+
"c1": []complex128{complex(2, float64(-2))},
570+
"us": []uintptr{0},
571+
"bo": []bool{false},
572+
"st": []string{"s"},
573+
}
574+
buf := bytes.NewBuffer(nil)
575+
enc := NewEncoder(buf)
576+
err := enc.Encode(m)
577+
if err != nil {
578+
t.Errorf("gob.Encode map: %s", err)
579+
}
580+
}

src/pkg/gob/type.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,25 @@ func registerBasics() {
762762
Register(float64(0))
763763
Register(complex64(0i))
764764
Register(complex128(0i))
765+
Register(uintptr(0))
765766
Register(false)
766767
Register("")
767768
Register([]byte(nil))
769+
Register([]int(nil))
770+
Register([]int8(nil))
771+
Register([]int16(nil))
772+
Register([]int32(nil))
773+
Register([]int64(nil))
774+
Register([]uint(nil))
775+
Register([]uint8(nil))
776+
Register([]uint16(nil))
777+
Register([]uint32(nil))
778+
Register([]uint64(nil))
779+
Register([]float32(nil))
780+
Register([]float64(nil))
781+
Register([]complex64(nil))
782+
Register([]complex128(nil))
783+
Register([]uintptr(nil))
784+
Register([]bool(nil))
785+
Register([]string(nil))
768786
}

0 commit comments

Comments
 (0)