50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

gobox 中的异常定义和杂项工具

  • 2019-11-18
  • 本文字数:2596 字

    阅读完需:约 9 分钟

gobox中的异常定义和杂项工具

今天给大家介绍下我们自主开发的 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 exceptionerrno : 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/tmpfile 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 successparse json file successsave parse json file k: k2 equalsave parse json file k: k3 equalsave 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 longend too longabcdefg 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:05not 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


2019-11-18 15:151110

评论

发布
暂无评论
发现更多内容

缓存数据历险记(一)--被缓存警察上课一天

卢卡多多

redis 缓存 8月日更

Hbase 入门详解

Se7en

学习的细碎之处

Nydia

2021京东最新Java面试真题解析

JVM调优资料

Java 程序员 后端

2021大厂Java开发面试总结+解答

JVM调优资料

Java 程序员 后端

2021大厂Java知识点总结

JVM调优资料

Java 程序员 后端

为什么需要数据库连接池

赖猫

MySQL 数据库 后端 连接池

黄金圈法则解读数据中台(1):为什么需要数据中台

水滴

数据中台 黄金圈法则 8月日更

2021Java岗面试题知识点小结

Geek_f90455

Java 程序员 后端

2021Java开发现状分析

Geek_f90455

Java 程序员 后端

Druid 通过 dsql 的服务器连接参数如何配置

HoneyMoose

2021Java进阶者的新篇章

JVM调优资料

Java 程序员 后端

我测了啊,我真测了!

QualityFocus

测试 质量保障 线上问题 缺陷

Vue组件通信之ref

Augus

8月日更

关于 go run 命令执行过程中的“坑坑点点”

liuzhen007

8月日更

Druid 通过 dsql 进行查询

HoneyMoose

JDK 从8升级到11,使用 G1 GC,HBase 性能下降近20%。JDK 到底干了什么?

毕昇JDK社区

12年高级工程师的“飞升之路”

Geek_f90455

Java 程序员 后端

2021Java不死我不倒

Geek_f90455

Java 程序员 后端

2021Java面试笔试总结

JVM调优资料

Java 程序员 后端

在线网页快捷方式创建工具

入门小站

工具

2021大厂Java面试真题集锦

JVM调优资料

Java 程序员 后端

2020-2021华为Java面试真题

Geek_f90455

Java 程序员 后端

2021Java者未来的出路在哪里

JVM调优资料

Java 程序员 后端

Linux之watch命令

入门小站

Linux

DDD领域驱动设计·学习应用·一

小诚信驿站

领域驱动设计 领域驱动模型DDD 中台架构 领域驱动

2020-2021京东Java面试真题解析

Geek_f90455

Java 程序员 后端

2020-2021阿里巴巴Java面试真题解析

Geek_f90455

Java 程序员 后端

03 设计模式之工厂模式

陈皮的JavaLib

Java 面试 设计模式 工厂模式 8月日更

停下来读读书

箭上有毒

生活随想 8月日更

2021大厂Java面试最火问题

JVM调优资料

Java 程序员 后端

gobox中的异常定义和杂项工具_文化 & 方法_Agang_InfoQ精选文章