From be6e7ac47dc57bd0ada25322fa526944f66ccaa6 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 14 Mar 2015 22:16:36 +0800 Subject: [PATCH] bug fixed for PK marshal & unmarshl --- pk.go | 17 +++++++++-------- pk_test.go | 11 +++++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/pk.go b/pk.go index 61d1371e..1810dd94 100644 --- a/pk.go +++ b/pk.go @@ -1,7 +1,8 @@ package core import ( - "encoding/json" + "bytes" + "encoding/gob" ) type PK []interface{} @@ -12,14 +13,14 @@ func NewPK(pks ...interface{}) *PK { } func (p *PK) ToString() (string, error) { - bs, err := json.Marshal(*p) - if err != nil { - return "", nil - } - - return string(bs), nil + buf := new(bytes.Buffer) + enc := gob.NewEncoder(buf) + err := enc.Encode(*p) + return buf.String(), err } func (p *PK) FromString(content string) error { - return json.Unmarshal([]byte(content), p) + dec := gob.NewDecoder(bytes.NewBufferString(content)) + err := dec.Decode(p) + return err } diff --git a/pk_test.go b/pk_test.go index 5245e574..05486086 100644 --- a/pk_test.go +++ b/pk_test.go @@ -2,6 +2,7 @@ package core import ( "fmt" + "reflect" "testing" ) @@ -19,4 +20,14 @@ func TestPK(t *testing.T) { t.Error(err) } fmt.Println(s) + + if len(*p) != len(*s) { + t.Fatal("p", *p, "should be equal", *s) + } + + for i, ori := range *p { + if ori != (*s)[i] { + t.Fatal("ori", ori, reflect.ValueOf(ori), "should be equal", (*s)[i], reflect.ValueOf((*s)[i])) + } + } }