47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
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
|
|
}
|