mirror of https://github.com/golang/go.git
encoding/gob: revert 6348067, which broke compatibility
Add commentary to explain better what's going on, but the code change is a simple one-line reversal to the previous form. R=rsc CC=golang-dev https://golang.org/cl/6428072
This commit is contained in:
parent
a8ce9ab46c
commit
7b73251d3d
|
|
@ -749,13 +749,29 @@ func Register(value interface{}) {
|
|||
rt := reflect.TypeOf(value)
|
||||
name := rt.String()
|
||||
|
||||
// But for named types (or pointers to them), qualify with import path.
|
||||
// But for named types (or pointers to them), qualify with import path (but see inner comment).
|
||||
// Dereference one pointer looking for a named type.
|
||||
star := ""
|
||||
if rt.Name() == "" {
|
||||
if pt := rt; pt.Kind() == reflect.Ptr {
|
||||
star = "*"
|
||||
rt = pt.Elem()
|
||||
// NOTE: The following line should be rt = pt.Elem() to implement
|
||||
// what the comment above claims, but fixing it would break compatibility
|
||||
// with existing gobs.
|
||||
//
|
||||
// Given package p imported as "full/p" with these definitions:
|
||||
// package p
|
||||
// type T1 struct { ... }
|
||||
// this table shows the intended and actual strings used by gob to
|
||||
// name the types:
|
||||
//
|
||||
// Type Correct string Actual string
|
||||
//
|
||||
// T1 full/p.T1 full/p.T1
|
||||
// *T1 *full/p.T1 *p.T1
|
||||
//
|
||||
// The missing full path cannot be fixed without breaking existing gob decoders.
|
||||
rt = pt
|
||||
}
|
||||
}
|
||||
if rt.Name() != "" {
|
||||
|
|
|
|||
Loading…
Reference in New Issue