今天给大家介绍下我们自主开发的 go 语言轻型框架 gobox,今天这一期,主要说下 gobox 中的异常定义和杂项工具。为什么叫 gobox 呢?因为我们设计让每一个单独的模块都作为一个 box,那这些 box 的集合就称为 gobox,再使用 go 的 pkg 管理机制引入到项目中。
exception
很多语言提供了异常机制,但是 go 没有,相似的能力可以用 panic/recover 来模拟,但是官方并不推荐这样做。
我们在系统中定义错误时通常需要错误码 errno 和错误信息 msg,这个包就是简单的包装了下这两个常用的错误内容。
用法示例
package main
import (
"github.com/goinbox/exception"
"fmt"
)
func main() {
e := exception.New(101, "test exception")
fmt.Println(e.Errno(), e.Msg())
fmt.Println(e.Error())
}
输出效果示例
101 test exception
errno : 101 , msg : test exception
gomisc
gomisc 提供了很多工具方法
slice 去重
这里仅对最常用的 int[]和 string[]提供了方法,示例:
package main
import (
"github.com/goinbox/gomisc"
"fmt"
)
func main() {
is := []int{1, 2, 2, 3, 3, 3, 4, 4, 4, 4}
fmt.Println("origin slice is: ", is)
is = gomisc.IntSliceUnique(is)
fmt.Println("after call slice is: ", is)
ss := []string{"a", "ab", "ab", "abc", "abc", "abc", "abcd", "abcd", "abcd", "abcd", "abcd"}
fmt.Println("origin slice is: ", ss)
ss = gomisc.StringSliceUnique(ss)
fmt.Println("after call slice is: ", ss)
}
结果输出:
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]
检查文件或是目录是否存在
示例:
package main
import (
"github.com/goinbox/gomisc"
"fmt"
)
func main() {
f := "/etc/passwd"
r := gomisc.FileExist(f)
if r {
fmt.Println(f, "is exist")
} else {
fmt.Println(f, "is not exist")
}
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 追加
示例:
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
递归获取指定根目录下的所有文件,包括子目录
这里的实现,解决了目录过深时栈溢出的问题,示例:
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)
}
}
输出:
root dir is: /home/ligang/tmp
file list under root dir are:
/home/ligang/tmp/misc/go1.10.2.linux-amd64.tar.gz
/home/ligang/tmp/misc/CLion-2018.1.2.tar.gz
/home/ligang/tmp/misc/docker-18.03.1-ce.tgz
/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 文件
示例:
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())
} else {
fmt.Println("save json file success")
}
v2 := make(map[string]string)
err = gomisc.ParseJsonFile(filePath, &v2)
if err != nil {
fmt.Println("parse json file failed: " + err.Error())
} else {
fmt.Println("parse json file success")
}
for k, v := range v2 {
if v != v1[k] {
fmt.Println("save parse json file error, k: " + k + " not equal")
} else {
fmt.Println("save parse json file k:", k, "equal")
}
}
}
输出:
save json file success
parse json file success
save parse json file k: k2 equal
save parse json file k: k3 equal
save parse json file k: k1 equal
字符串截取
示例:
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(s, "substr", "3,4", "is", ss)
}
输出:
end too long
end too long
abcdefg substr 3,4 is defg
时间格式化时的常量定义
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"
常用时间格式化时的格式
输出格式: yyyy-mm-dd h:i:s
示例:
package main
import (
"github.com/goinbox/gomisc"
"fmt"
"time"
)
func main() {
layout := gomisc.TimeGeneralLayout()
fmt.Println("fmt layout is", layout)
fmt.Println("not time is", time.Now().Format(layout))
}
输出:
fmt layout is 2006-01-02 15:04:05
not time is 2018-05-20 06:15:08
通过时间生成随机数
示例:
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))
}
输出:
4423491624236117727 4423491624236117727 1471010178475409526
这里请注意:时间值相同时运算结果是相同的。
欢迎大家使用,使用中有遇到问题随时反馈,我们会尽快响应,谢谢!
本文转载自公众号 360 云计算(ID:hulktalk)。
原文链接:
https://mp.weixin.qq.com/s/3YZm9BCzGgvRezne-ORLCA
更多内容推荐
2022-04-24:用 go 语言重写 ffmpeg 的 muxing.c 示例。
2022-04-24:用go语言重写ffmpeg的muxing.c示例。
2023-04-24
Lattice - 模式级复用的能力定义
本文介绍了Lattice框架中关键概念“能力”的介绍,并结合一个简单样例阐述如何进行能力的抽象,并基于能力做模式级扩展。
2023-01-29
第 19 讲 薪酬体系设计之如何管理薪酬包?
2023-10-17
技术盘点:云原生中间件的技术演进与未来趋势展望
过去这几年,随着云原生技术生态的高速发展,中间件技术也在顺应这个大趋势向前演进,如果要说中间件的演进大方向,我认为就是云原生化,但是对于中间件来说,这里面包含了两层含义。
2022-02-20
7.SCA 集成 RocketMQ 的最佳实践
2023-09-29
05. 高效沟通必须要掌握的工具——乔哈里视窗(上)
2023-10-17
第 14 讲 薪酬体系设计简易法(上)
2023-10-17
二极管及其应用
(1)定义:导电能力介于导体和绝缘体之间的一类物质,称为半导体。常用的半导体材料是硅和锗。
2022-08-02
抢先预约 | 阿里云无影云应用线上发布会预约开启
无影云应用即将重磅发布,精彩不容错过!
2022-05-16
零基础去程序员培训机构靠不靠谱?
零基础选择java培训机构来学习开发技术还是挺靠谱的,现在市面上比较靠谱的培训机构还是比较多的,通过培训的方式来学习开发技术,是快速学习入门的一种比较靠谱的方式。不过现在市面上的java培训机构随着开发技术的不断更新在逐渐增多,小伙伴想要找到适合自
2022-12-14
3. Jenkins&Maven
2023-09-30
详解数据结构中栈的定义和操作
本文为大家详解数据结构中栈的定义和操作。
2023-04-20
leetcode 15. 3Sum 三数之和 (中等)
sortfind,整个数组排序O(NlogN),以示例1为例,先排序为[-4, -1, -1, 0, 1, 2],定义一个a遍历,再遍历求b,c,此时令b等于a接下来的第一个元素,c为最后一个元素,判断a+b+c<0时令b+1,如果a+b+c>0时令c-1.
2022-10-23
计网复习一,计算机网络原理概述
计算机网络定义
2022-09-02
在线问题反馈模块实战 (六): 接口文档定义
在线问题反馈模块实战教学,等你来白嫖,非常详细,适合新手小白学习。
2022-10-20
2022 南京国际智慧工地装备展览会
2022南京国际智慧工地装备展览会
2022-06-10
2023 上海国际智慧停车展览会
2023上海国际智慧停车展览会
2023-08-21
5. Spec 管理神器:Helm
2023-09-27
坚持五件事,带你走出迷茫困境!
迷茫的原因有很多,大部分都是自己面对未来的不确定性不知道以后会过什么样的生活,但心里清楚自己恐惧什么样的未来。
2022-06-23
第二届征文大赛开奖啦!速来领奖!
第二届有奖征文活动开奖啦!
2022-06-10
推荐阅读
LP 丨 IDO 预售智能合约流动性挖矿系统开发搭建
2023-09-01
21. 销售团队薪酬绩效设计(上)
2023-10-17
什么是代理 IP? 代理 IP 有什么作用?
2023-11-27
2023-12-06:用 go 语言,给你一个由 n 个数对组成的数对数组 pairs, 其中 pairs[i] = [lefti, righti] 且 lefti < righti 。 现在,我们定义一
2023-12-06
答疑课堂(二)|第二章 Rust 进阶篇思考题答案
2023-12-08
18|错误处理系统:错误的构建、传递和处理
2023-11-29
彩票的导师都是怎么赚钱的——玩家经验分享
2023-09-05
电子书
大厂实战PPT下载
换一换 王海华 | 货拉拉 ⼤数据基础架构负责⼈ / 架构师
熊飞 | 经纬中国 合伙人
汪晟杰 | 腾讯云 开发者产品中心/产品总监
评论