package jxutils import ( "bytes" "encoding/base64" "encoding/gob" "reflect" ) func CheckAndGetStructValue(item interface{}) *reflect.Value { value := reflect.ValueOf(item) if value.Kind() == reflect.Ptr { value = value.Elem() } else { panic("item ust be ptr type") } return &value } func GetObjFieldByName(obj interface{}, fieldName string) interface{} { return reflect.Indirect(reflect.ValueOf(obj)).FieldByName(fieldName).Interface() } func SetObjFieldByName(obj interface{}, fieldName string, value interface{}) { refValue := CheckAndGetStructValue(obj) refValue.FieldByName(fieldName).Set(reflect.ValueOf(value)) } func SerializeData(data interface{}) (strValue string, err error) { var buf bytes.Buffer enc := gob.NewEncoder(&buf) if err = enc.Encode(data); err == nil { strValue = base64.StdEncoding.EncodeToString(buf.Bytes()) return strValue, nil } return "", err } func DeSerializeData(strValue string, dataPtr interface{}) (err error) { byteData, err := base64.StdEncoding.DecodeString(strValue) if err == nil { dec := gob.NewDecoder(bytes.NewReader(byteData)) return dec.Decode(dataPtr) } return err }