gobox中的常用工具包gomisc

有一些常用的工具函数,我们把它们放到gomisc这个包中。

工具介绍

Slice中的值Unique

func IntSliceUnique(s []int) []int
func StringSliceUnique(s []string) []string

示例:

package main

import (
    "github.com/goinbox/gomisc"

    "fmt"
)

func main() {
    TestIntSliceUnique()
    TestStringSliceUnique()
}

func TestIntSliceUnique() {
    s := []int{1, 2, 2, 3, 3, 3, 4, 4, 4, 4}

    fmt.Println("origin slice is: ", s)

    s = gomisc.IntSliceUnique(s)

    fmt.Println("after call slice is: ", s)
}

func TestStringSliceUnique() {
    s := []string{"a", "ab", "ab", "abc", "abc", "abc", "abcd", "abcd", "abcd", "abcd", "abcd"}

    fmt.Println("origin slice is: ", s)

    s = gomisc.StringSliceUnique(s)

    fmt.Println("after call slice is: ", s)
}

输出:

origin slice is:  [1 2 2 3 3 3 4 4 4 4]
after call slice is:  [1 2 3 4]
origin slice is:  [a ab ab abc abc abc abcd abcd abcd abcd abcd]
after call slice is:  [a ab abc abcd]

文件、目录是否存在

func FileExist(path string) bool
func DirExist(path string) bool

示例:

package main

import (
    "github.com/goinbox/gomisc"

    "fmt"
)

func main() {
    TestFileExist()
    TestDirExist()
}

func TestFileExist() {
    f := "/etc/passwd"

    r := gomisc.FileExist(f)
    if r {
        fmt.Println(f, "is exist")
    } else {
        fmt.Println(f, "is not exist")
    }
}

func TestDirExist() {
    d := "/home/ligang/devspace"

    r := gomisc.DirExist(d)
    if r {
        fmt.Println(d, "is exist")
    } else {
        fmt.Println(d, "is not exist")
    }
}

输出:

/etc/passwd is exist
/home/ligang/devspace is exist

多个[]byte拼接

func AppendBytes(b []byte, elems ...[]byte) []byte

示例:

package main

import (
    "github.com/goinbox/gomisc"

    "fmt"
)

func main() {
    b := []byte("abc")
    b = gomisc.AppendBytes(b, []byte("def"), []byte("ghi"))

    fmt.Println(string(b))
}

输出:

abcdefghi

列出目录中的所有文件(包括子目录)

func ListFilesInDir(rootDir string) ([]string, error)

示例:

package main

import (
    "github.com/goinbox/gomisc"

    "fmt"
)

func main() {
    fileList, err := gomisc.ListFilesInDir("/home/ligang/tmp")
    if err != nil {
        fmt.Println(err)
        return
    }

    for _, path := range fileList {
        fmt.Println(path)
    }
}

输出:

/home/ligang/tmp/misc/accounts.json
/home/ligang/tmp/go/main.go
/home/ligang/tmp/go/.idea/modules.xml
/home/ligang/tmp/go/.idea/workspace.xml
/home/ligang/tmp/go/.idea/go.iml

保存/解析json文件

func SaveJsonFile(filePath string, v interface{}) error
func ParseJsonFile(filePath string, v interface{}) error

示例:

package main

import (
    "github.com/goinbox/gomisc"

    "fmt"
)

func main() {
    filePath := "/tmp/test_save_parse_json_file.json"

    v1 := make(map[string]string)
    v1["k1"] = "a"
    v1["k2"] = "b"
    v1["k3"] = "c"

    err := gomisc.SaveJsonFile(filePath, v1)
    if err != nil {
        fmt.Println("save json file failed: " + err.Error())
    }

    v2 := make(map[string]string)
    err = gomisc.ParseJsonFile(filePath, &v2)
    if err != nil {
        fmt.Println("parse json file failed: " + err.Error())
    }

    ok := true
    for k, v := range v2 {
        if v != v1[k] {
            ok = false
            fmt.Println("save parse json file error, k: " + k + " not equal")
        }
    }
    if ok {
        fmt.Println("save parse json file ok")
    }
}

输出:

save parse json file ok

字符串截取

func SubString(str string, start, cnt int) (string, error)

示例:

package main

import (
    "github.com/goinbox/gomisc"

    "fmt"
)

func main() {
    s := "abcdefg"

    _, err := gomisc.SubString(s, 3, 20)
    fmt.Println(err)

    _, err = gomisc.SubString(s, 10, 3)
    fmt.Println(err)

    ss, _ := gomisc.SubString(s, 3, 4)
    fmt.Println(ss)
}

输出:

end too long
end too long
defg

时间格式化定义

const (
    TIME_FMT_STR_YEAR   = "2006"
    TIME_FMT_STR_MONTH  = "01"
    TIME_FMT_STR_DAY    = "02"
    TIME_FMT_STR_HOUR   = "15"
    TIME_FMT_STR_MINUTE = "04"
    TIME_FMT_STR_SECOND = "05"
)

// 时间格式:yy-mm-dd H:i:s
func TimeGeneralLayout() string {
    layout := TIME_FMT_STR_YEAR + "-" + TIME_FMT_STR_MONTH + "-" + TIME_FMT_STR_DAY + " "
    layout += TIME_FMT_STR_HOUR + ":" + TIME_FMT_STR_MINUTE + ":" + TIME_FMT_STR_SECOND

    return layout
}

生成随机数

func RandByTime(t *time.Time) int64

示例:

package main

import (
    "github.com/goinbox/gomisc"

    "fmt"
    "time"
)

func main() {
    tm := time.Now()
    fmt.Println(gomisc.RandByTime(&tm), gomisc.RandByTime(&tm), gomisc.RandByTime(nil))
}

输出:

6537266505970973466 6537266505970973466 5616191991172093652

欢迎大家使用,使用中有遇到问题随时反馈,我们会尽快响应,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 今年是一个特殊的年份,当然,这是对我而言。 因为今年夏天的炎热,让我感到空前,而夏天的漫长,也要比记忆中任何一年都...
    锡安之光阅读 3,918评论 0 0
  • 《關於腹部》 腹部是第三能量中心所在。能量由此向上盤旋時變得更為進取和熱情。腹部的能量中心掌管人際關係,社會化發展...
    威李阅读 231评论 0 0
  • 最近,《人民的名义》实在太火,火到朋友圈都被达康书记的表情包刷屏了。 和小伙伴抱着巨大的好奇心,点开了这部剧。 没...
    悬浮岛上无人生还阅读 129评论 0 0
  • 因为你是你,所以你成为了你。在思考和写作的过程中,我会看到很多不同的我,和我不安的内心,我试图去梳理,去找到我之所...
    林青澜阅读 373评论 0 1