| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package Utils
- import (
- "bytes"
- "encoding/gob"
- "encoding/json"
- "fmt"
- "github.com/json-iterator/go"
- "reflect"
- "github.com/astaxie/beego/logs"
- "github.com/ugorji/go/codec"
- )
- var jsonIter = jsoniter.ConfigCompatibleWithStandardLibrary
- func ToJson(obj interface{}) ([]byte, error) {
- return json.Marshal(obj)
- }
- func FromJson(data []byte, t interface{}) error {
- return json.Unmarshal(data, t)
- }
- func ToJsonIterator(obj interface{}) ([]byte, error) {
- return jsonIter.Marshal(obj)
- }
- func FromJsonIterator(data []byte, t interface{}) error {
- return jsonIter.Unmarshal(data, t)
- }
- func MsgpEncode(obj interface{}) []byte {
- var mh codec.MsgpackHandle
- mh.MapType = reflect.TypeOf(obj)
- var buf bytes.Buffer
- enc := codec.NewEncoder(&buf, &mh)
- err := enc.Encode(obj)
- if err == nil {
- return buf.Bytes()
- } else {
- logs.Error(err)
- return nil
- }
- }
- func MsgpDecode(data []byte, obj interface{}) error {
- var mh codec.MsgpackHandle
- mh.MapType = reflect.TypeOf(obj)
- dec := codec.NewDecoder(bytes.NewReader(data), &mh)
- err := dec.Decode(&obj)
- return err
- }
- func DeepCopy(dst, src interface{}) error {
- var buf bytes.Buffer
- if err := gob.NewEncoder(&buf).Encode(src); err != nil {
- return err
- }
- return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
- }
- func ShowObjAllProp(obj interface{}) {
- value_method := reflect.ValueOf(obj)
- obj_type := value_method.Type()
- fmt.Printf("输出对象的属性和方法\t%v\n", obj)
- fmt.Println("\tMethods...")
- for i := 0; i < value_method.NumMethod(); i++ {
- fmt.Printf("\t%d\t%s\n", i, obj_type.Method(i).Name)
- }
- value_element := reflect.ValueOf(obj).Elem()
- obj_element := value_element.Type()
- fmt.Println("\tFields...")
- for i := 0; i < value_element.NumField(); i++ {
- fmt.Printf("\t%d\t%s\n", i, obj_element.Field(i).Name)
- }
- }
|