在开发 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
特性:
-
提供诸如
Index、Delete、Unique等常用数组操作。 -
支持对数组或切片进行排序、筛选、打乱等操作。
sectioning 提供了针对数组和切片的功能
Index查找符合条件元素在数组中的位置Delete删除符合条件的切片元素Unique提取数组中的唯一元素Count统计数组或切片中包含指定什的数量CutCut 去除 slice 中符合 eq 的元素Each遍历 slice,并对每个元素执行 fnFilter遍历 slice,并对每个元素执行 fn,返回符合 fn 的元素First返回 slice 中第一个元素IsEmpty判断 slice 是否为空Pop删除 slice 中的最后一个元素,并返回该元素Push在 slice 的末尾添加元素Shuffle打乱 sliceSort排序 sliceMinOrMax返回 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】 公众号,成为我们的一员,让我们一起在编程的海洋中探索、学习、成长!