pkg/mask 提供基于结构体标签的通用脱敏能力,适用于响应输出前的数据清洗。
mask tag 自动脱敏字符串字段。type MaskFunc func(value string) stringtype MaskOption func(*maskOptions)RegisterMaskFunc(tag string, fn MaskFunc)MaskValue(value any, opts ...MaskOption) anyMaskMobileMaskEmailMaskIDCardMaskBankCardMaskNameMaskAddress对应标签:mobile、email、idcard、bankcard、name、address
WithMaskChar(char rune):修改默认脱敏字符,默认 *WithMaskRules(rules map[string]MaskFunc):为本次调用叠加临时规则type User struct {
Name string `json:"name" mask:"name"`
Mobile string `json:"mobile" mask:"mobile"`
Email string `json:"email" mask:"email"`
}
masked := mask.MaskValue(User{
Name: "张三",
Mobile: "13800138000",
Email: "user@example.com",
})
mask.RegisterMaskFunc("secret", func(value string) string {
return "[REDACTED]"
})
masked := mask.MaskValue(data, mask.WithMaskChar('#'))
Context 提供了直接响应接口:
c.OKMasked(data, opts...)c.PaginatedMasked(data, page, perPage, total, opts...)mask.MaskValue,再自行返回 JSON。r.GET("/profile", func(c *gin.Context) {
c.OKMasked(user)
})