在开发 Golang
的项目过程中,断断续续的写了一些常用的 扩展包, 简化日常开发任务,从地址生成到数据脱敏,再到时间和数组处理等各个方面.下面是对每个扩展包的详细介绍和使用示例的补充
[chinese-address-generator]
chinese-address-generator
包专注于生成中国地区的地址信息,非常适合用于测试数据生成或表单预填充等场景。该包借鉴了 PHP 和 Node.js 中类似功能的实现,并进行了优化以满足 Golang 项目的需求。
地址如下:
1
| https://github.com/GoFinalPack/chinese-address-generator
|
特性
- 支持生成省、市、区、县四级地址。
- 提供完整的虚拟地址生成方法,方便开发者在模拟数据时使用。
安装:
1
| go get github.com/GoFinalPack/chinese-address-generator@v1.0.0
|
使用如下:
1 2 3 4 5 6 7 8 9 10 11 12
| g := chineseaddressgenerator.Generator{} g.Init() level1 := g.GenerateLevel1() fmt.Println(level1) level2 := g.GenerateLevel2() fmt.Println(level2) level3 := g.GenerateLevel3() fmt.Println(level3) level4 := g.GenerateLevel4() fmt.Println(level4) fullAddress := g.FabricateFullAddress() fmt.Println(fullAddress)
|
[pf_util]
pf_util
是一个专注于信息脱敏的工具包,主要用于对敏感信息(如身份证号、手机号、邮箱地址、银行卡号等)进行处理。我在多个项目中都遇到过类似的需求,因此开发了这个扩展包,以便在不同场景中复用。
特性
- 支持多种类型的脱敏,例如身份证号、手机号码等。
- 提供自定义脱敏方法,用户可以根据项目需求灵活定义脱敏规则。
地址如下:
1
| https://github.com/GoFinalPack/pf_util
|
安装:
1
| go get github.com/GoFinalPack/pf_util@v1.0.0
|
使用如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package tests
import ( "fmt" "pf_util" "testing" )
func TestDesensitizedUtilUserId(T *testing.T) { d := pf_util.DesensitizedUtil{} res := d.SetType(0).Desensitized("10000") fmt.Println(res) }
func TestDesensitizedUtilName(T *testing.T) { d := pf_util.DesensitizedUtil{} res := d.SetType(1).Desensitized("黄宗泽") fmt.Println(res) }
func TestDesensitizedUtilIDcard(T *testing.T) { d := pf_util.DesensitizedUtil{} res := d.SetType(2).Desensitized("51343620000320711X") fmt.Println(res) }
func TestCustomerIDcard(T *testing.T) { d := pf_util.DesensitizedUtil{} res := d.Method("idCardNum", "51343620000320711X", 4, 2) fmt.Println(res) }
func TestCustomerChineseName(t *testing.T) { d := pf_util.DesensitizedUtil{} result := d.Method("chineseName", "黄老板") fmt.Println(result) }
|
[auto-correct]
auto-correct
包是一个用于自动调整中英文之间的空格,并纠正专有名词大小写的工具。它允许开发者自定义字典以替换文本中的特定词汇,从而确保文本的一致性和专业性。
地址如下:
1
| https://github.com/GoFinalPack/auto-correct
|
特性
- 自动在中英文之间添加适当的空格。
- 纠正专有名词的大小写,以保持文档的一致性。
- 支持自定义字典,用户可以根据实际需求进行配置。
PS: 默认使用的是封装好的字典,可以通过 env
来加载自定义的字典:
默认字典:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| ...
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
....
|
安装:
1 2
| go get -u https://github.com/GoFinalPack/auto-correct@v1.0.0
|
使用如下:
1 2 3 4 5 6 7 8
| a := auto_correct.AutoCorrect{} a.Init() text := "golang 使用中文测试" fmt.Println(a.Correct(text))
text = "pfinalclub测试" fmt.Println(a.Correct(text))
|
[unique]
unique
是一个用于生成唯一字符串的小型扩展包,主要用于创建唯一键、锁、标识符等场景,确保在高并发环境下的数据唯一性。
地址如下:
1
| https://github.com/GoFinalPack/unique
|
特性
- 生成基于时间戳的唯一 ID。
- 基于雪花算法生成唯一 ID。
安装:
1
| go get github.com/GoFinalPack/unique@v1.0
|
使用如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
import "testing"
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
包提供了对数组和切片的常用操作功能,方便开发者在处理复杂数据结构时更加高效。虽然这个包是较早开发的,但它仍然在一些旧项目中发挥着作用。
地址如下:
1
| https://github.com/GoFinalPack/sectioning
|
特性:
- 提供诸如
Index
、Delete
、Unique
等常用数组操作。
- 支持对数组或切片进行排序、筛选、打乱等操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 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 中最小或者最大的元素
|
安装:
1
| go get github.com/GoFinalPack/sectioning@v1.0
|
使用如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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 开发。虽然这个包开发于三年前,现在可能有更好的替代方案,但它依然在一些项目中使用。
地址如下:
1
| https://github.com/GoFinalPack/carbon
|
安装:
1
| go get github.com/GoFinalPack/carbon@v1.0
|
使用如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
t := &carbon.Carbon{} fmt.Println(t.Now()) fmt.Println(t.Now("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("-")) 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
使用例子,如果有在项目中用到,就可以直接来用. 不喜勿喷哈.