今天为大家推荐一款go语言的函数工具库Lancet
首先说一下为什么我们需要使用函数工具库。
- 提高开发效率
这里我举一个例子,在go语言中类型转换并不是非常方便,比如我需要将一个数值类型转换成字符串,针对int、int64和无符号整型就有三个方法
strconv.FormatInt(i int64, base int) string
strconv.FormatUint(i uint64, base int) string
strconv.Itoa(i int)
如果再要将字符串转回整型有需要用
strconv.ParseInt(s string, base int, bitSize int) (i int64, err error)
strconv.ParseUint(s string, base int, bitSize int) (uint64, error)
strconv.Atoi(s string) (int, error)
同样以类型转换为例,如果想要将不同类型转换成[]byte,在go语言内置函数中,不同和函数甚至多种不同的方式将类型转换成[]byte
但是使用Lancet工具库只需要使用其中的convertor就可以方便的完成类型转换
// 不同类型转string
convertor.ToString(value any) string
// 字符串转int
convertor.ToInt(value any) (int64, error)
// 不同类型转换[]byte
convertor.ToBytes(value any) ([]byte, error)
仅类型转换这一类操作就可以方便快速的帮我们完成代码,节约很多时间.
- 规范团队编码
就上面的转换[]byte为例,如果我要将一个int64转换为[]byte,就会出现不同的写法
有人会用strconv实现
import "strconv"
var i int64 = 1234567890
var b []byte = strconv.AppendInt(nil, i, 10)
有人会用encoding/binary实现
import "encoding/binary"
var i int64 = 1234567890
var buf [8]byte
binary.BigEndian.PutUint64(buf[:], uint64(i))
// 或者
binary.LittleEndian.PutUint64(buf[:], uint64(i))
也会有人用binary.Write写入bytes.Buffer
甚至还有人会写出如下的代码
var i int64 = 1234567890
var b []byte = (*[8]byte)(unsafe.Pointer(&i))[:]
但是我们使用convertor.ToBytes是不是就可以很好的约束代码规范,同时减少很多不必要的问题
总之使用Lancet是让我们将精力从"如何写这个代码"转移到"如何完成这个业务"的一个有力工具.
在介绍Lancet都有哪些工具模块之前我们先看看刚才说到的类型转换convertor都有哪些方法
- ColorHexToRGB
- ColorRGBToHex
- ToBool
- ToBytes
- ToChar
- ToChannel
- ToFloat
- ToInt
- ToJson
- ToMap
- ToPointer
- ToString
- StructToMap
- MapToSlice
- EncodeByte
- DecodeByte
- DeepClone
- CopyProperties
- ToInterface
- Utf8ToGbk
- GbkToUtf8
- ToStdBase64
- ToUrlBase64
- ToRawStdBase64
- ToRawUrlBase64
是不是很全面啊.看命名大家也应该知道都是用来做什么用的.我就不一一介绍了.
Lancet的功能模块非常全面,它包含超过 600 个工具函数,分布在 25 个包中。这些功能模块包括但不限于:
算法(algorithm):提供各种算法实现。
比较器(compare):用于比较操作。
并发处理(concurrency):简化并发编程。
条件判断(condition):提供条件判断相关的函数。
类型转换(convertor):简化不同类型之间的转换。
加密&解密(cryptor):提供加解密功能。
数据结构(datastructure):实现多种数据结构。
日期&时间(datetime):处理日期和时间的函数。
文件(fileutil):文件操作相关的工具函数。
格式化工具(formatter):数据格式化相关函数。
函数(function):提供函数相关的工具。
迭代器(iterator):实现迭代器模式。
Map(maputil):处理 map 相关操作的工具。
数学工具(mathutil):提供数学计算相关的函数。
网络(netutil):网络编程相关的工具。
指针(pointer):指针操作相关的函数。
随机数(random):生成随机数的相关函数。
重试(retry):实现重试机制的工具。
切片(slice):处理 slice 的工具函数。
流(stream):流处理相关的函数。
结构体(structs):操作结构体的工具函数。
字符串(strutil):处理字符串的函数。
系统(system):系统操作相关的工具函数。
元组(tuple):处理元组的函数。
验证器(validator):数据验证相关的函数。
错误处理(xerror):错误处理相关的工具。
最后摘抄一段官方的介绍:"为什么选择lancet?"
Lancet 消除了处理并发、网络、数学、切片、字符串等的麻烦,使 Go 开发变得更容易。 Lancet 的实用方法非常适合:
迭代切片和数组。
操作字符串。
处理网络和http请求。
其他工具,例如。 随机、加密、流、重试等。
谢谢大家能阅读我的文章,有对Lancet感兴趣的可以详细查阅官方文档: Lancet | LancetGitHubGitHub
同时感谢大家的关注、转发和评论
本文暂时没有评论,来添加一个吧(●'◡'●)