写点什么

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:151134

评论

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

Fabric.js 激活输入框

德育处主任

fabric canvas Fabric.js 6月月更

关于在线帮助中心你需要思考以下几个问题

小炮

明道云上榜2022年中国信创行业办公软件排行榜

明道云

【Python技能树共建】lambda 表达式

梦想橡皮擦

6月月更

JavaScript寄生式组合继承

大熊G

JavaScript 前端 6月月更

学生管理系统架构设计文档

Geek_e8bfe4

C#入门系列(九) -- 方法使用

陈言必行

C# 6月月更

10 个派上用场的 Flutter 小部件

坚果

6月月更

Linux中有趣的命令:cowsay,会说话的牛!

wljslmz

Linux 6月月更 cowsay

Leetcode 349 两个数组的交集 ( Intersection of Two Arrays *Easy* ) 题解分析

Nick

Java LeetCode 6月月更 leetcode 349 两个数组的交集

spring4.1.8初始化源码学习三部曲之三:AbstractApplicationContext.refresh方法

程序员欣宸

Java spring Spring Framework 6月月更

运算符

Jason199

运算符 js 6月月更

使用 ViroReact 开发增强实现应用的一个具体例子

汪子熙

AR React 增强现实 6月月更

Flink CDC + Hudi 海量数据入湖在顺丰的实践

Apache Flink

大数据 flink 编程 流计算 实时计算

编程简单科普系列-什么是编程(1)

迷彩

编程 科普 二进制 6月月更 电信号

外包学生管理系统架构文档(架构实战营 模块三作业)

Gor

开发一个软件应用程序需要多少钱?

开源直播系统源码

软件开发 定制开发 直播源码

Nacos配置中心实战,盘古微服务开发标配组件

码农大熊

微服务架构 nacos 盘古开发框架 分布式开发

Django API 开发:实现用户登录与注册

宇宙之一粟

django 6月月更

[模块三]

wuli洋

文档书写规范

甜甜的白桃

文档 6月月更

Web Service进阶(八)BASE64Decoder小解

No Silver Bullet

6月月更 BASE64Decoder

InfoQ 极客传媒 15 周年庆征文| 迁移 Eureka 到 Nacos 之双注册双订阅模式

4ye

架构 nacos Eureka springcloudAlibaba InfoQ极客传媒15周年庆

外包学生管理系统架构文档

Geek_7a789a

WordPress 版本更新

海拥(haiyong.site)

WordPress 6月月更

使用 KubeKey 搭建 Kubernetes/KubeSphere 环境的“心路(累)历程“

胡说云原生

Kubernetes KubeSphere KubeKey

物联网低代码平台如何使用操作日志?

AIRIOT

物联网 低代码开发 低代码平台 物联网关

TiDB Cloud 上线 Google Cloud Marketplace,以全新一栈式实时 HTAP 数据库赋能全球开发者

PingCAP

TiDB

外包学生管理系统架构文档

Pengfei

Linux开发_网络编程、网络通信介绍

DS小龙哥

6月月更

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