美文网首页
golang解决一些小问题代码

golang解决一些小问题代码

作者: Sixah | 来源:发表于2018-05-04 17:48 被阅读0次

    1>. 时间向下格式化成五分钟的倍数,返回时间字符串格式。比如:t =2018-05-04 14:08:22 -> "201805041405"

    func FloorFiveMinute(t time.Time) string {
            m := t.Minute()
            m -= m % 5
            mStr := strconv.Itoa(m)
            mStr = strings.Repeat("0", 2-len(mStr)) + mStr
            return t.Format("2006010215") + mStr
    }
    

    2>. 时间向下格式化成五分钟的倍数。比如:t = 2018-05-04 14:12:26 -> 2018-05-04 14:12:00

    func FloorFiveMinuteTime(t time.Time) time.Time {
            s := FloorFiveMinute(t)  //引用 1>. 里的格式化时间函数
            ret, err := time.Parse("200601021504", s)
            if err != nil {
                    panic(err)
            }
            return ret
    }
    

    3>. 获取传入时间的零点以及传入时间前一天的零点。比如:t = 2018-05-04 14:20:22 -> start = 2018-05-03 00:00:00,end = 2018-05-04 00:00:00

    func GetDayBeforeTime(t time.Time) (time.Time, time.Time) {
            y, m, d := t.Date()
            start := time.Date(y, m, d-1, 0, 0, 0, 0, time.Local)
            end := time.Date(y, m, d, 0, 0, 0, 0, time.Local)
            return start, end
    }
    

    4>. 把一个 map[string][]int 类型的map Json序列化,返回的是一个 map[string]string 类型的map,这是返回的map中,值是Json序列化后的string类型。比如:data = map["Sixah" : [1, 2, 1, 3, 1, 4 ]] -> map["Sixah" : {"1, 2, 1, 3, 1, 4"}]

    func FomatJson(data map[string][]int) map[string]string {
            result := make(map[string]string)
            for str, val := range data {
                    value, err := json.Marshal(val)
                    if err != nil {
                           return nil
                    }
                    result[str] = string(value)
            }
            return result
    }
    

    5>. 字符串数组去重、去空。需要注意的是,在传入数组a之前,需要使用sort包中的sort.Strings(a []type)函数排序处理一下。比如:a = []string{"aa", "aa", "bb", "bb", " ", "cc"} -> [ ]string{"aa", "bb", "cc"}

    func RemoveDuplicatesAndEmpty(a [ ]string) [ ]string {
            a_len := len(a)
            var ret []string
            for i := 0; i < a_len; i++ {
                    if (i > 0 && a[i-1] == a[i]) || len(a[i]) == 0 {
                            continue
                    }
                    ret = append(ret, a[i])
            }
            return ret
    }
    

    6>. Redis数据库不支持Sql语句,属于NoSql、键值对key-value类型的数据库,我们在使用过程中可能会需要模糊查询key,尽管不支持Sql语句,但是Redis也提供了scan用来完成模糊查询的功能,具体原理可以去查Google或者Baidu,下面是实现的代码:

    {
            var b uint64
            var a []string
            for {
                    var aa []string
                    var err error
                    aa, b, err = ftredis.Client.Scan(b, "stat*", 1000).Result()
                    if err != nil {
                    return a
                    }
                    a = append(a, aa...)
                   if b == 0 {
                           break
                    }
            }
    }
    

    7>. 将两个相同类型,相同key的map合并成一个map。比如:a = map["Sixah" : [1, 2, 3, 4, 5]] , b = map["Sixah" : [6, 7, 8, 9, 0]] -> c = map["Sixah" : [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]]

    func MergeMap( a map[string][]int, b map[string][]int ) map[string][]int {
            c := make(map[string][]int)
            for k,v := range b {
                for k1, v1 := range a {
                    if k1 == k {
                            i := len(v)
                            j := 0
                            for j < i {
                                   v1 = append(v1, v[j])
                                   j++
                            }
                            c[k1] = v1
                    }
            }
        }
        return c
    }
    

    相关文章

      网友评论

          本文标题:golang解决一些小问题代码

          本文链接:https://www.haomeiwen.com/subject/xjfjrftx.html