限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

评论

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

NFT商城游戏系统开发技术

薇電13242772558

NFT

谁能在第四代算力革命中脱颖而出?CPU?GPU?算法?数据?

GPU算力

Linux之ping命令

入门小站

Linux

应对EAST 5.0新挑战!索信达推出灵矩全景式监管合规平台

索信达控股

数据治理 金融 监管平台 数智化 合规性

当渲染遇上边缘计算,打造视频交互新模式

火山引擎边缘云

云原生 边缘计算 实时渲染

简单说明一下数据库审计能带来的价值

行云管家

数据库 数据安全 数据库审计

什么是云效?通过云效体验一站式研发,实现10 倍效能提升

阿里云云效

阿里云 DevOps 云原生 研发效能 云效

读一篇博客,写一段代码,每天写写Python自然就会了,每日Python第1天

梦想橡皮擦

Python 3月月更

selenium的实现原理

红毛丹

自动化测试 自动化测试框架 selenium 3月程序媛福利 3月月更

面向体验,助推超视频时代新增长

字节跳动视频云技术团队

音视频开发

语音顶会 ICASSP 2022 成果分享:基于时频感知域模型的单通道语音增强算法

阿里云CloudImagine

阿里云 音频 论文 视频云 智能降噪

js几种网络请求方式梳理——摆脱回调地狱

有道技术团队

selenium相对定位器

红毛丹

3月程序媛福利 3月月更

详解用OpenCV绘制各类几何图形

华为云开发者联盟

OpenCV 图像处理 图像 几何图形

DevOps流水线CI 成倍提速方案

八戒技术团队

DevOps

网易智企发布“易+”开源计划,网易会议组件正式开源

网易云信

音视频 开发

大规模异构数据的线索列表进化之路

百度Geek说

后端

2022年中国个人云盘行业发展年度分析

易观分析

个人云盘

恒源云(Gpushare)_【活动专区】已上线,没有最优只有更优

恒源云

人工智能 算法 服务器

在线HTML转PUG工具

入门小站

工具

【等级保护】等级保护共分为几级?保护对象是指什么?

行云管家

网络安全 等保 等级保护 等保2.0

深入浅出特征工程 -- 基于 OpenMLDB 的实践指南(下)

第四范式开发者社区

数据库 sql 人工智能「 特征 特征平台

关于 CentOS 迁移龙蜥操作系统,这里有一份详细指南,请查收!

OpenAnolis小助手

centos 开源 操作系统 龙蜥

Web 键盘输入法应用开发指南 (4) —— 组合键

天择

JavaScript 键盘 输入法 3月月更

老牌软件厂商亚信科技加入,携手龙蜥社区共建开源生态

OpenAnolis小助手

开源 亚信科技 互联网社区

今儿直白的用盖房子为例,给你讲讲Java建造者模式

华为云开发者联盟

Java 设计模式 对象 建造者模式 对象构建模式

当TIME_WAIT状态的TCP正常挥手,收到SYN后…

华为云开发者联盟

TCP syn 报文 TIME_WAIT RST报文

一个好的持续交付流水线是怎样的? | 研发效能提升36计

阿里云云效

云计算 阿里云 云原生 持续交付 持续部署

TiDB Online DDL 在 TiCDC 中的应用丨TiDB 工具分享

PingCAP

ImageView变灰、倒影、圆角、加水印

逆锋起笔

android 图片处理 3月月更 imageView

为什么在数据驱动的路上,AB实验值得信赖?

字节跳动数据平台

字节跳动 数据分析 AB testing实战 ab测试

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