]> Cypherpunks repositories - gostls13.git/commitdiff
gob: register more slice types
authorBobby Powers <bobbypowers@gmail.com>
Wed, 13 Jul 2011 07:12:17 +0000 (17:12 +1000)
committerRob Pike <r@golang.org>
Wed, 13 Jul 2011 07:12:17 +0000 (17:12 +1000)
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

src/pkg/gob/encoder_test.go
src/pkg/gob/type.go

index 792afbd77528769acbe06ddd116324b68cd4a873..f5ee423cb2b6e5abc7e2302f3ff29e0f44a460ad 100644 (file)
@@ -549,3 +549,32 @@ func TestMapBug1(t *testing.T) {
                t.Errorf("mismatch: %v %v", in, out)
        }
 }
+
+func TestGobMapInterfaceEncode(t *testing.T) {
+       m := map[string]interface{}{
+               "up": uintptr(0),
+               "i0": []int{-1},
+               "i1": []int8{-1},
+               "i2": []int16{-1},
+               "i3": []int32{-1},
+               "i4": []int64{-1},
+               "u0": []uint{1},
+               "u1": []uint8{1},
+               "u2": []uint16{1},
+               "u3": []uint32{1},
+               "u4": []uint64{1},
+               "f0": []float32{1},
+               "f1": []float64{1},
+               "c0": []complex64{complex(2, -2)},
+               "c1": []complex128{complex(2, float64(-2))},
+               "us": []uintptr{0},
+               "bo": []bool{false},
+               "st": []string{"s"},
+       }
+       buf := bytes.NewBuffer(nil)
+       enc := NewEncoder(buf)
+       err := enc.Encode(m)
+       if err != nil {
+               t.Errorf("gob.Encode map: %s", err)
+       }
+}
index 552faa4d694d47cdfe96b4c64958242edac51b00..258a01e158d26d631f1d288a37676db7f3cf0c04 100644 (file)
@@ -762,7 +762,25 @@ func registerBasics() {
        Register(float64(0))
        Register(complex64(0i))
        Register(complex128(0i))
+       Register(uintptr(0))
        Register(false)
        Register("")
        Register([]byte(nil))
+       Register([]int(nil))
+       Register([]int8(nil))
+       Register([]int16(nil))
+       Register([]int32(nil))
+       Register([]int64(nil))
+       Register([]uint(nil))
+       Register([]uint8(nil))
+       Register([]uint16(nil))
+       Register([]uint32(nil))
+       Register([]uint64(nil))
+       Register([]float32(nil))
+       Register([]float64(nil))
+       Register([]complex64(nil))
+       Register([]complex128(nil))
+       Register([]uintptr(nil))
+       Register([]bool(nil))
+       Register([]string(nil))
 }