gobox中的常用工具包gomisc

栏目: Go · 发布时间: 6年前

内容简介:有一些常用的工具函数,我们把它们放到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))
}

输出:

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

反应式设计模式

反应式设计模式

Roland Kuhn、Brian Hanafee、Jamie Allen / 何品、邱嘉和、王石冲、林炜翔审校 / 清华大学出版社 / 2019-1-1 / 98.00 元

《反应式设计模式》介绍反应式应用程序设计的原则、模式和经典实践,讲述如何用断路器模式将运行缓慢的组件与其他组件隔开、如何用事务序列(Saga)模式实现多阶段事务以及如何通过分片模式来划分数据集,分析如何保持源代码的可读性以及系统的可测试性(即使在存在许多潜在交互和失败点的情况下)。 主要内容 ? “反应式宣言”指南 ? 流量控制、有界一致性、容错等模式 ? 得之不易的关于“什么行不通”的经验 ? ......一起来看看 《反应式设计模式》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器