提升生产力的 Golang 实用工具推荐,让开发更轻松!

152 阅读6分钟


在开发 Golang的项目过程中,断断续续的写了一些常用的 扩展包, 简化日常开发任务,从地址生成到数据脱敏,再到时间和数组处理等各个方面.下面是对每个扩展包的详细介绍和使用示例的补充

[chinese-address-generator]

chinese-address-generator 包专注于生成中国地区的地址信息,非常适合用于测试数据生成或表单预填充等场景。该包借鉴了 PHP 和 Node.js 中类似功能的实现,并进行了优化以满足 Golang 项目的需求。

地址如下:

https://github.com/GoFinalPack/chinese-address-generator

特性

  • 支持生成省、市、区、县四级地址。

  • 提供完整的虚拟地址生成方法,方便开发者在模拟数据时使用。

安装:

go get github.com/GoFinalPack/chinese-address-generator@v1.0.0

使用如下:

    g := chineseaddressgenerator.Generator{}    g.Init()    level1 := g.GenerateLevel1()  // 一级地址    fmt.Println(level1)          // {"code": "230000", "region": "黑龙江省"}    level2 := g.GenerateLevel2() // 二级地址    fmt.Println(level2)          // {"code": "620100", "region": "甘肃省兰州市"} level3 := g.GenerateLevel3() // 三级地址    fmt.Println(level3)          // {"code": "350205", "region": "福建省厦门市海沧区"}    level4 := g.GenerateLevel4() // 四级地址    fmt.Println(level4)          // {"code": "310113111000", "region": "上海市市辖区宝山区高境镇"} fullAddress := g.FabricateFullAddress()  // 生成完整地址    fmt.Println(fullAddress)     // {"code": "622926209000", "region": "甘肃省临夏回族自治州东乡族自治县五家乡1115号182室", "buildNo": 1115, "roomNo": 182}

[pf_util]

pf_util是一个专注于信息脱敏的工具包,主要用于对敏感信息(如身份证号、手机号、邮箱地址、银行卡号等)进行处理。我在多个项目中都遇到过类似的需求,因此开发了这个扩展包,以便在不同场景中复用。

特性

  • 支持多种类型的脱敏,例如身份证号、手机号码等。

  • 提供自定义脱敏方法,用户可以根据项目需求灵活定义脱敏规则。

地址如下:

https://github.com/GoFinalPack/pf_util

安装:

go get github.com/GoFinalPack/pf_util@v1.0.0

使用如下:

package testsimport ( "fmt" "pf_util" "testing")/** * @Author: PFinal南丞 * @Author: lampxiezi@163.com * @Date: 2024/9/2 * @Desc: * @Project: pf_util */func TestDesensitizedUtilUserId(T *testing.T) { d := pf_util.DesensitizedUtil{} res := d.SetType(0).Desensitized("10000") // 0 不暴露 fmt.Println(res)}func TestDesensitizedUtilName(T *testing.T) { d := pf_util.DesensitizedUtil{} res := d.SetType(1).Desensitized("黄宗泽") // 0 不暴露 fmt.Println(res)}func TestDesensitizedUtilIDcard(T *testing.T) { d := pf_util.DesensitizedUtil{} res := d.SetType(2).Desensitized("51343620000320711X") // 5***************1X fmt.Println(res)}func TestCustomerIDcard(T *testing.T) { d := pf_util.DesensitizedUtil{} res := d.Method("idCardNum", "51343620000320711X", 4, 2) // 5134************1X fmt.Println(res)}func TestCustomerChineseName(t *testing.T) { d := pf_util.DesensitizedUtil{} result := d.Method("chineseName", "黄老板") fmt.Println(result)}

[auto-correct]

auto-correct 包是一个用于自动调整中英文之间的空格,并纠正专有名词大小写的工具。它允许开发者自定义字典以替换文本中的特定词汇,从而确保文本的一致性和专业性。

地址如下:

https://github.com/GoFinalPack/auto-correct

特性

  • 自动在中英文之间添加适当的空格。

  • 纠正专有名词的大小写,以保持文档的一致性。

  • 支持自定义字典,用户可以根据实际需求进行配置。

PS: 默认使用的是封装好的字典,可以通过 env来加载自定义的字典:

默认字典:

...

app:App
ios:iOS
iphone:iPhone
ipad:iPad
android:Android
osx:OS X
mac:Mac
imac:iMac
macbookpro:MacBook Pro
macbook:MacBook
rmbp:rMBP
wi-fi:Wi-Fi
wifi:Wi-Fi
vps:VPS
vpn:VPN
arm:ARM
cpu:CPU
pdf:PDF
pfinal:PFinal
pfinalclub:PFinal Club

....

安装:

go get -u https://github.com/GoFinalPack/auto-correct@v1.0.0

使用如下:

 a := auto_correct.AutoCorrect{} a.Init() text := "golang 使用中文测试"   // Golang 使用中文测试 fmt.Println(a.Correct(text)) text = "pfinalclub测试"     //  PFinal Club 测试 fmt.Println(a.Correct(text))

[unique]

unique 是一个用于生成唯一字符串的小型扩展包,主要用于创建唯一键、锁、标识符等场景,确保在高并发环境下的数据唯一性。

地址如下:

https://github.com/GoFinalPack/unique

特性

  • 生成基于时间戳的唯一 ID。

  • 基于雪花算法生成唯一 ID。

安装:

go get github.com/GoFinalPack/unique@v1.0

使用如下:

import "testing"/** * @Author: PFinal南丞 * @Author: lampxiezi@163.com * @Date: 2022/6/10 11:14 * @Desc: */func TestUnique_Time64(t *testing.T) { u := &Unique{} t.Log(u.Time64())}func TestUnique_Time32(t *testing.T) { u := &Unique{} t.Log(u.Time32())}func TestGetUniqueCodeByTime(t *testing.T) { u := &Unique{} t.Log(u.GetUniqueCodeByTime())}func TestUnique_GetUniqueCodeBySnowflake(t *testing.T) { u := &Unique{} t.Log(u.GetUniqueCodeBySnowflake().String())}

[sectioning]

sectioning 包提供了对数组和切片的常用操作功能,方便开发者在处理复杂数据结构时更加高效。虽然这个包是较早开发的,但它仍然在一些旧项目中发挥着作用。

地址如下:

https://github.com/GoFinalPack/sectioning

特性:

  • 提供诸如 IndexDeleteUnique 等常用数组操作。

  • 支持对数组或切片进行排序、筛选、打乱等操作。

    sectioning 提供了针对数组和切片的功能

    • Index 查找符合条件元素在数组中的位置
    • Delete 删除符合条件的切片元素
    • Unique 提取数组中的唯一元素
    • Count 统计数组或切片中包含指定什的数量
    • Cut Cut 去除 slice 中符合 eq 的元素
    • Each 遍历 slice,并对每个元素执行 fn
    • Filter 遍历 slice,并对每个元素执行 fn,返回符合 fn 的元素
    • First 返回 slice 中第一个元素
    • IsEmpty 判断 slice 是否为空
    • Pop 删除 slice 中的最后一个元素,并返回该元素
    • Push 在 slice 的末尾添加元素
    • Shuffle 打乱 slice
    • Sort 排序 slice
    • MinOrMax 返回 slice 中最小或者最大的元素

安装:

go get github.com/GoFinalPack/sectioning@v1.0

使用如下:

func TestShuffle(t *testing.T) { intSlice := []int{1, 2, 3, 7, 0, 4, 7} b := Shuffle(intSlice) t.Log(b) c := Shuffle(objSlice) t.Log(c)}func TestSort(t *testing.T) { intSlice := []int{1, 2, 3, 7, 0, 4, 7} b := Sort(intSlice, func(i, j int) bool {  return i > j }) t.Log(b) c := Sort(objSlice, func(i, j *obj) bool {  return i.ID > j.ID }) t.Log(c)}

[carbon]

carbon 是一个类 Laravel Carbon 的时间处理包,专门为 Golang 开发。虽然这个包开发于三年前,现在可能有更好的替代方案,但它依然在一些项目中使用。

地址如下:

https://github.com/GoFinalPack/carbon

安装:

go get github.com/GoFinalPack/carbon@v1.0

使用如下:

    t := &carbon.Carbon{} fmt.Println(t.Now()) // 获取当前时间 fmt.Println(t.Now("UTC")) // 获取UTC 时间 fmt.Println(t.Timestamp()) //  获取当前的时间戳 fmt.Println(t.TimestampToDate(1640844203, "Ymd")) //时间戳转 年-月-日 fmt.Println(t.TimestampToDate(1640844203, "Ymd/")) // 时间戳 转 年/月/日 fmt.Println(t.TimestampToDate(1640844203, "Ymdh"))  fmt.Println(t.Parse("yesterday").Format("-"))    // 获取昨天 时间 fmt.Println(t.Parse("tomorrow").Format("-"))    //  获取明天 时间 fmt.Println(t.Parse("+2 days").Format("-"))    // 获取2天后时间 fmt.Println(t.Parse("+1 weeks").Format("-"))   // 获取一周后时间 fmt.Println(t.Parse("+1 months").Format("-")) fmt.Println(t.Parse("+1 year").Format("-")) fmt.Println(t.Parse("-2 days").Format("-")) fmt.Println(t.Parse("-2 weeks").Format("-")) fmt.Println(t.Parse("next monday").Format("-")) fmt.Println(t.Parse("next tuesday").Format("-")) fmt.Println(t.Parse("next wednesday").Format("-")) fmt.Println(t.Parse("next thursday").Format("-")) fmt.Println(t.Parse("next friday").Format("-")) fmt.Println(t.Parse("next saturday").Format("-")) fmt.Println(t.Parse("next sunday").Format("-")) fmt.Println(t.Parse("last monday").Format("-")) fmt.Println(t.Parse("last sunday").Format("-")) fmt.Println(t.Parse("last tuesday").Format("-")) fmt.Println(t.Parse("next sunday").IsWeekday()) fmt.Println(t.Ymd()) fmt.Println(t.Format("/")) fmt.Println(t.Ymd("/")) fmt.Println(t.StartOfDay()) fmt.Println(t.EndOfDay()) fmt.Println(t.StartOfWeek()) fmt.Println(t.EndOfWeek()) c := carbon.Create("2012-01-02", "PRC") fmt.Println(c.StartOfDay())

总结

上面的扩展包,是在工作中,写的一些常用的扩展, 所有的包里面 都有 test 使用例子,如果有在项目中用到,就可以直接来用. 不喜勿喷哈.

最后

🌟 更多精彩内容等你发现!关注【PFinalClub】 公众号,成为我们的一员,让我们一起在编程的海洋中探索、学习、成长!