forked from golang/hotime
161 lines
2.6 KiB
Go
161 lines
2.6 KiB
Go
package hotime
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"reflect"
|
|
"time"
|
|
)
|
|
|
|
//hotime的常用map
|
|
type Map map[string]interface{}
|
|
|
|
//获取string
|
|
func (this Map) GetString(key string, err ...*Error) string {
|
|
|
|
if len(err) != 0 {
|
|
err[0].SetError(nil)
|
|
}
|
|
return ObjToStr((this)[key])
|
|
|
|
}
|
|
|
|
func (this *Map) Pointer() *Map {
|
|
|
|
return this
|
|
}
|
|
|
|
//增加接口
|
|
func (this Map) Put(key string, value interface{}) {
|
|
//if this==nil{
|
|
// this=Map{}
|
|
//}
|
|
this[key] = value
|
|
}
|
|
|
|
//删除接口
|
|
func (this Map) Delete(key string) {
|
|
delete(this, key)
|
|
|
|
}
|
|
|
|
//获取Int
|
|
func (this Map) GetInt(key string, err ...*Error) int {
|
|
v := ObjToInt((this)[key], err...)
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
|
|
// //唯一标志
|
|
func (this Map) GetTag() int64 {
|
|
|
|
res := this.GetInt64(MUTEX_MAP)
|
|
if res == int64(0) {
|
|
res = time.Now().UnixNano()
|
|
this.Put(MUTEX_MAP, res)
|
|
}
|
|
return res
|
|
}
|
|
|
|
//获取Int
|
|
func (this Map) GetInt64(key string, err ...*Error) int64 {
|
|
v := ObjToInt64((this)[key], err...)
|
|
return v
|
|
|
|
}
|
|
|
|
//获取向上取整Int64
|
|
func (this Map) GetCeilInt64(key string, err ...*Error) int64 {
|
|
v := ObjToCeilInt64((this)[key], err...)
|
|
return v
|
|
|
|
}
|
|
//获取向上取整Int
|
|
func (this Map) GetCeilInt(key string, err ...*Error) int {
|
|
v := ObjToCeilInt((this)[key], err...)
|
|
return v
|
|
|
|
}
|
|
|
|
//获取Float64
|
|
func (this Map) GetFloat64(key string, err ...*Error) float64 {
|
|
|
|
v := ObjToFloat64((this)[key], err...)
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
func (this Map) GetSlice(key string, err ...*Error) Slice {
|
|
|
|
//var v Slice
|
|
v := ObjToSlice((this)[key], err...)
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
func (this Map) GetMap(key string, err ...*Error) Map {
|
|
//var data Slice
|
|
|
|
v := ObjToMap((this)[key], err...)
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
func (this Map) Get(key string, err ...*Error) interface{} {
|
|
|
|
if v, ok := (this)[key]; ok {
|
|
return v
|
|
}
|
|
e := errors.New("没有存储key及对应的数据")
|
|
|
|
if len(err) != 0 {
|
|
err[0].SetError(e)
|
|
|
|
}
|
|
return nil
|
|
}
|
|
|
|
//请传递指针过来
|
|
func (this Map) ToStruct(stct interface{}) {
|
|
|
|
data := reflect.ValueOf(stct).Elem()
|
|
for k, v := range this {
|
|
ks := StrFirstToUpper(k)
|
|
dkey := data.FieldByName(ks)
|
|
if !dkey.IsValid() {
|
|
continue
|
|
}
|
|
switch dkey.Type().String() {
|
|
case "int":
|
|
dkey.SetInt(this.GetInt64(k))
|
|
case "int64":
|
|
dkey.Set(reflect.ValueOf(this.GetInt64(k)))
|
|
case "float64":
|
|
dkey.Set(reflect.ValueOf(this.GetFloat64(k)))
|
|
case "string":
|
|
dkey.Set(reflect.ValueOf(this.GetString(k)))
|
|
case "interface{}":
|
|
dkey.Set(reflect.ValueOf(v))
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
func (this Map) ToJsonString() string {
|
|
return ObjToStr(this)
|
|
|
|
}
|
|
|
|
func (this Map) JsonToMap(jsonStr string, err ...*Error) {
|
|
e := json.Unmarshal([]byte(jsonStr), &this)
|
|
if e != nil && len(err) != 0 {
|
|
err[0].SetError(e)
|
|
}
|
|
|
|
}
|