Files
exchange_go/pkg/utility/maps.go
2025-02-06 11:14:33 +08:00

55 lines
1.1 KiB
Go

package utility
import (
"github.com/mitchellh/mapstructure"
"reflect"
"time"
)
// 映射;
type maps struct {
}
// 构建;
func Maps() *maps {
return &maps{}
}
// 转为结构体;
func (this *maps) Struct(src, dst interface{}) error {
config := &mapstructure.DecoderConfig{
WeaklyTypedInput: true,
DecodeHook: mapstructure.ComposeDecodeHookFunc(ToTimeHookFunc()),
Result: &dst,
}
decoder, err := mapstructure.NewDecoder(config)
if err != nil {
return err
}
if err = decoder.Decode(src); err != nil {
return err
}
return nil
}
func ToTimeHookFunc() mapstructure.DecodeHookFunc {
return func(
f reflect.Type,
t reflect.Type,
data interface{}) (interface{}, error) {
if t != reflect.TypeOf(time.Time{}) {
return data, nil
}
switch f.Kind() {
case reflect.String:
return time.Parse(time.RFC3339, data.(string))
case reflect.Float64:
return time.Unix(0, int64(data.(float64))*int64(time.Millisecond)), nil
case reflect.Int64:
return time.Unix(0, data.(int64)*int64(time.Millisecond)), nil
default:
return data, nil
}
}
}