|
@@ -39,7 +39,7 @@ func Uuid(length int) string {
|
|
|
return strings.Join(ret, "")
|
|
|
}
|
|
|
|
|
|
-//计算字符串和值
|
|
|
+// 计算字符串和值
|
|
|
func Sumstring(code string) (sum int) {
|
|
|
tmp := []rune(code)
|
|
|
for _, v := range tmp {
|
|
@@ -48,7 +48,7 @@ func Sumstring(code string) (sum int) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-//获取随机数
|
|
|
+// 获取随机数
|
|
|
func GetRandom(n int) string {
|
|
|
var idChars = []byte("0123456789")
|
|
|
b := captcha.RandomDigits(n)
|
|
@@ -58,7 +58,7 @@ func GetRandom(n int) string {
|
|
|
return string(b)
|
|
|
}
|
|
|
|
|
|
-//获取复杂的随机数
|
|
|
+// 获取复杂的随机数
|
|
|
func GetLetterRandom(length int, flag ...bool) string {
|
|
|
var idChars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
|
|
|
var mod byte = 52
|
|
@@ -145,14 +145,14 @@ func EncryCode(value string) string {
|
|
|
return value
|
|
|
}
|
|
|
|
|
|
-//生成32位md5字串
|
|
|
+// 生成32位md5字串
|
|
|
func GetMd5String(s string) string {
|
|
|
h := md5.New()
|
|
|
h.Write([]byte(s))
|
|
|
return hex.EncodeToString(h.Sum(nil))
|
|
|
}
|
|
|
|
|
|
-//obj(string,M)转M,查询用到
|
|
|
+// obj(string,M)转M,查询用到
|
|
|
func ObjToMap(obj interface{}) *map[string]interface{} {
|
|
|
data := make(map[string]interface{})
|
|
|
if s, ok := obj.(string); ok {
|
|
@@ -194,7 +194,7 @@ func IntAll(num interface{}) int {
|
|
|
|
|
|
func Int64All(num interface{}) int64 {
|
|
|
if i, ok := num.(int64); ok {
|
|
|
- return int64(i)
|
|
|
+ return i
|
|
|
} else if i0, ok0 := num.(int32); ok0 {
|
|
|
return int64(i0)
|
|
|
} else if i1, ok1 := num.(float64); ok1 {
|
|
@@ -213,10 +213,13 @@ func Int64All(num interface{}) int64 {
|
|
|
return int64(i6)
|
|
|
} else if i7, ok7 := num.(*big.Int); ok7 {
|
|
|
in, _ := strconv.ParseInt(fmt.Sprint(i7), 10, 64)
|
|
|
- return int64(in)
|
|
|
+ return in
|
|
|
} else if i8, ok8 := num.(*big.Float); ok8 {
|
|
|
in, _ := strconv.ParseInt(fmt.Sprint(i8), 10, 64)
|
|
|
- return int64(in)
|
|
|
+ return in
|
|
|
+ } else if i9, ok9 := num.(json.Number); ok9 {
|
|
|
+ in, _ := i9.Int64()
|
|
|
+ return in
|
|
|
} else {
|
|
|
return 0
|
|
|
}
|
|
@@ -263,7 +266,7 @@ func Float64All(num interface{}) float64 {
|
|
|
|
|
|
func IntAllDef(num interface{}, defaultNum int) int {
|
|
|
if i, ok := num.(int); ok {
|
|
|
- return int(i)
|
|
|
+ return i
|
|
|
} else if i0, ok0 := num.(int32); ok0 {
|
|
|
return int(i0)
|
|
|
} else if i1, ok1 := num.(float64); ok1 {
|
|
@@ -274,16 +277,19 @@ func IntAllDef(num interface{}, defaultNum int) int {
|
|
|
return int(i3)
|
|
|
} else if i4, ok4 := num.(string); ok4 {
|
|
|
in, _ := strconv.Atoi(i4)
|
|
|
- return int(in)
|
|
|
+ return in
|
|
|
} else if i5, ok5 := num.(int16); ok5 {
|
|
|
return int(i5)
|
|
|
} else if i6, ok6 := num.(int8); ok6 {
|
|
|
return int(i6)
|
|
|
} else if i7, ok7 := num.(*big.Int); ok7 {
|
|
|
in, _ := strconv.Atoi(fmt.Sprint(i7))
|
|
|
- return int(in)
|
|
|
+ return in
|
|
|
} else if i8, ok8 := num.(*big.Float); ok8 {
|
|
|
in, _ := strconv.Atoi(fmt.Sprint(i8))
|
|
|
+ return in
|
|
|
+ } else if i9, ok9 := num.(json.Number); ok9 {
|
|
|
+ in, _ := i9.Int64()
|
|
|
return int(in)
|
|
|
} else {
|
|
|
return defaultNum
|
|
@@ -313,7 +319,7 @@ func ObjToStringDef(old interface{}, defaultstr string) string {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//对象数组转成string数组
|
|
|
+// 对象数组转成string数组
|
|
|
func ObjArrToStringArr(old []interface{}) []string {
|
|
|
if old != nil {
|
|
|
new := make([]string, len(old))
|
|
@@ -326,7 +332,7 @@ func ObjArrToStringArr(old []interface{}) []string {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//对象数组转成map数组
|
|
|
+// 对象数组转成map数组
|
|
|
func ObjArrToMapArr(old []interface{}) []map[string]interface{} {
|
|
|
if old != nil {
|
|
|
new := make([]map[string]interface{}, len(old))
|
|
@@ -339,7 +345,7 @@ func ObjArrToMapArr(old []interface{}) []map[string]interface{} {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//map数组转成对象数组
|
|
|
+// map数组转成对象数组
|
|
|
func MapArrToObjArr(old []map[string]interface{}) []interface{} {
|
|
|
if old != nil {
|
|
|
new := make([]interface{}, len(old))
|
|
@@ -404,7 +410,7 @@ func SubString(str string, begin, length int) (substr string) {
|
|
|
return string(rs[begin:end])
|
|
|
}
|
|
|
|
|
|
-//捕获异常
|
|
|
+// 捕获异常
|
|
|
func Try(fun func(), handler func(interface{})) {
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
@@ -421,7 +427,7 @@ func Try(fun func(), handler func(interface{})) {
|
|
|
fun()
|
|
|
}
|
|
|
|
|
|
-//3目运算
|
|
|
+// 3目运算
|
|
|
func If(b bool, to, fo interface{}) interface{} {
|
|
|
if b {
|
|
|
return to
|
|
@@ -430,7 +436,7 @@ func If(b bool, to, fo interface{}) interface{} {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//HashCode值
|
|
|
+// HashCode值
|
|
|
func HashCode(uid string) int {
|
|
|
var h uint32 = 0
|
|
|
rs := []rune(uid)
|
|
@@ -440,7 +446,7 @@ func HashCode(uid string) int {
|
|
|
return int(h)
|
|
|
}
|
|
|
|
|
|
-//获取离n天的秒差
|
|
|
+// 获取离n天的秒差
|
|
|
func GetDayStartSecond(n int) int64 {
|
|
|
now := time.Now()
|
|
|
tom := time.Date(now.Year(), now.Month(), now.Day()+n, 0, 0, 0, 0, time.Local)
|
|
@@ -478,7 +484,7 @@ func EndWith(value, str string) bool {
|
|
|
return ok
|
|
|
}
|
|
|
|
|
|
-//出错拦截
|
|
|
+// 出错拦截
|
|
|
func Catch() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Println(r)
|
|
@@ -515,7 +521,7 @@ func ConvertFileSize(s int) string {
|
|
|
return fmt.Sprintf("%d B", s)
|
|
|
}
|
|
|
|
|
|
-//MD5签名
|
|
|
+// MD5签名
|
|
|
func WxSign(format string, param ...interface{}) string {
|
|
|
data := fmt.Sprintf(format, param...)
|
|
|
h := md5.New()
|
|
@@ -524,7 +530,7 @@ func WxSign(format string, param ...interface{}) string {
|
|
|
return sign
|
|
|
}
|
|
|
|
|
|
-//计算时差
|
|
|
+// 计算时差
|
|
|
func TimeDiff(date time.Time) string {
|
|
|
var date1 = date //开始时间
|
|
|
var date2 = time.Now() //结束时间
|
|
@@ -563,7 +569,7 @@ func FloatFormat(tmp float64, n int) float64 {
|
|
|
return f
|
|
|
}
|
|
|
|
|
|
-//生成微信支付的签名
|
|
|
+// 生成微信支付的签名
|
|
|
func CreateWxSign(afterStr string, obj interface{}, filter ...string) string {
|
|
|
filter = append(filter, "sign", "xml")
|
|
|
keys := []string{}
|
|
@@ -611,7 +617,7 @@ L:
|
|
|
return WxSign(strings.Join(vs, "&") + afterStr)
|
|
|
}
|
|
|
|
|
|
-//简单的xml转map,只有一个层级,没有多层嵌套
|
|
|
+// 简单的xml转map,只有一个层级,没有多层嵌套
|
|
|
func XmlToMap(input string) map[string]string {
|
|
|
var t xml.Token
|
|
|
var err error
|
|
@@ -667,19 +673,19 @@ func SimpleCrontab(flag bool, c string, f func()) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//v保留n为小数,n后的四舍五入
|
|
|
+// v保留n为小数,n后的四舍五入
|
|
|
func RetainDecimal(v float64, n int) float64 {
|
|
|
n10 := math.Pow10(n)
|
|
|
return math.Trunc((v+0.5/n10)*n10) / n10
|
|
|
}
|
|
|
|
|
|
-//序列化成想要的类型,再断言
|
|
|
+// 序列化成想要的类型,再断言
|
|
|
func JsonUnmarshal(m interface{}, s interface{}) interface{} {
|
|
|
JsonUnmarshalByErr(m, s)
|
|
|
return s
|
|
|
}
|
|
|
|
|
|
-//序列化成想要的类型,再断言
|
|
|
+// 序列化成想要的类型,再断言
|
|
|
func JsonUnmarshalByErr(m interface{}, s interface{}) (interface{}, error) {
|
|
|
var b []byte
|
|
|
var err error
|
|
@@ -759,7 +765,7 @@ func Bind(data interface{}, ret interface{}) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-//string
|
|
|
+// string
|
|
|
func InterfaceToStr(x interface{}) string {
|
|
|
switch st := reflect.ValueOf(x); st.Kind() {
|
|
|
case reflect.Uint, reflect.Uintptr, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
|
|
@@ -777,7 +783,7 @@ func InterfaceToStr(x interface{}) string {
|
|
|
|
|
|
}
|
|
|
|
|
|
-//StrFormat string追加格式化双引号
|
|
|
+// StrFormat string追加格式化双引号
|
|
|
func StrFormat(s string) string {
|
|
|
if s == "" {
|
|
|
return ""
|
|
@@ -785,7 +791,7 @@ func StrFormat(s string) string {
|
|
|
return fmt.Sprintf("\"%s\"", s)
|
|
|
}
|
|
|
|
|
|
-//判断是否是微信访问
|
|
|
+// 判断是否是微信访问
|
|
|
func IsWxBrowser(Request *http.Request) bool {
|
|
|
if strings.Index(Request.UserAgent(), "MicroMessenger") > -1 || strings.Index(Request.UserAgent(), "Wechat") > -1 {
|
|
|
return true
|
|
@@ -794,7 +800,6 @@ func IsWxBrowser(Request *http.Request) bool {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//
|
|
|
func ShortenTxt(length int, fixed, shorten string) string {
|
|
|
if len([]rune(fixed)) > length {
|
|
|
return ""
|
|
@@ -807,7 +812,7 @@ func ShortenTxt(length int, fixed, shorten string) string {
|
|
|
return ""
|
|
|
}
|
|
|
|
|
|
-//获取问号占位符数量及对应的参数值
|
|
|
+// 获取问号占位符数量及对应的参数值
|
|
|
func WhArgs(args []string) (string, []interface{}) {
|
|
|
newArgs := make([]interface{}, len(args))
|
|
|
wh := make([]string, len(args))
|