程序员难免会自造轮子,因为有时候自己的轮子才更适合自己,golang 的生态圈不错,官方的,非官方都有很多不同功能的库。本文从小处着眼,基于 github 开源工程创建属于自己的工具包。
简单介绍
本文的工具包,不依赖第三方库,全部使用官方的包。实际中使用了第三方库,则另起目录,作为其它包提供。不影响本包。本包命名为 com,可理解为通用的包。包括但不限于以下内容:
数值和字符串转换,进制转换。
目录、文件操作。
日期、时间。
命令执行。
MD5、base64。
地址内容打印Dump。
模块介绍
本小节列出一些函数的实现,详细参考文后源码地址。
字符串和数值转换
字符串转为数值:
1 | // Convert string to specify type. |
可根据不同函数,将字符串转换成对应的数值。注意,此处不判断原始字符串,通过不同函数指定格式。如256
,即可认为十进制,也可认为是十六进制。
数值转换为字符串:
1 |
|
十六进制和字符串转换:
1 | // HexStr2int converts hex format string to decimal number. |
缓冲区、结构体打印
缓冲区打印:
1 | func Dump(by []byte, len int) { |
该函数实际为笔者 C 语言版本的改写。
结构体或map的打印:
1 | // 将数组、map等,按行打印,默认fmt.Println是一行 |
时间相关
1 | // Format unix time int64 to string |
延时函数:
1 | func Sleep(ms time.Duration) { |
其它工具包
本小节列出其它的工具包。
日志
我一起纠结使用哪个日志库,在犹豫中花费很多时间,最后决定先用着一个版本,待到不合适时,再选择其它的。在接触 KubeEdge项目时,了解了 klog 库,考虑到其轻便,最终改造并使用。为了保持原样,其位置和名称均无变化。原始版本提供的主要接口函数如下:
1 | Fatal Fatalf Fatalln |
为了方便自己理解和使用,额外再添加:
1 | Print Printf Println |
这样就可以和 fmt 无缝切换了。
另外,考虑到不需要 pid,所以在输出提示符中去掉了 pid。输出格式如下:
1 | [2020-10-20 21:47:29.411 busy.go:20] hello world |
此提示符为笔者一直使用且已习惯。
详情可参考klog源码 。
补记:
log4go功能强大,但似乎不能转义\n
,会将其原样输出。
源码
本文所述工具包,大部分来自 无闻github 的开源项目,在实践中不断优化并添加自己认为必要的工具函数。详细可参考笔者的 golang工程 。在此向 无闻 致敬!