package entity import ( "encoding/json" ) type KV map[string]interface{} func NewKv(v interface{}) KV { var kv = KV{} switch v.(type) { case string: kv.LoadJsonString(v.(string)) case []byte: kv.LoadJsonByte(v.([]byte)) default: kv.Load(v) } return kv } func (kv KV) Result(key string) KV { return NewKv(kv[key]) } func (kv KV) Set(key string, v interface{}) { kv[key] = v } func (kv *KV) Load(v interface{}) error { b, err := json.Marshal(v) if err != nil { return err } return json.Unmarshal(b, &kv) } func (kv *KV) LoadJsonByte(v []byte) error { return json.Unmarshal(v, &kv) } func (kv *KV) LoadJsonString(v string) error { return json.Unmarshal([]byte(v), &kv) } func (kv KV) Json() string { b, _ := json.Marshal(kv) return string(b) } func (kv KV) JsonByte() []byte { b, _ := json.Marshal(kv) return b }