Golang实现简单的接口去重函数
- 开源代码
- 2025-08-23 03:12:01

背景
在某次项目中,我们需要采集所有路径(path),但发现部分接口的参数嵌入在路径中。会导致大量重复采集。为此,提出了一种简单有效的去重代码(较为粗糙)。
代码 package main import ( "fmt" "regexp" "strings" ) // replaceNumbersWithID 替换路径中的数字、字母加数字组合以及连续的中文字符编码 func replaceNumbersWithID(input string) string { // 4. 替换 UUID 格式的字符串 reUUID := regexp.MustCompile(`[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}`) result := reUUID.ReplaceAllString(input, "{:id}") // 1. 替换连续的中文字符编码(%开头,后面跟着两个十六进制字符,连续出现) reChinese := regexp.MustCompile(`(?:%[0-9A-Fa-f]{2})+`) result = reChinese.ReplaceAllString(result, "{:id}") // 2. 替换独立的数字 reDigits := regexp.MustCompile(`\b[0-9]+\b`) result = reDigits.ReplaceAllStringFunc(result, func(match string) string { // 检查数字前后是否有字母(避免替换类似`abc123`中的`123`) if strings.IndexFunc(match, func(r rune) bool { return r >= 'a' && r <= 'z' || r >= 'A' && r <= 'Z' }) != -1 { return match // 不进行替换 } return "{:id}" }) // 3. 替换字母加数字组合超过12位的字符串 reLong := regexp.MustCompile(`\b[a-zA-Z0-9]{13,}\b`) result = reLong.ReplaceAllString(result, "{:id}") return result } func main() { // 示例路径 paths := []string{ "/api/user/123", "/api/product/456/details", "/api/order/789", "/api/user/profile", "/api/data/%E6%88%91%E6%98%AF%E4%B8%80%E4%B8%AA%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE", // 包含连续的中文字符编码 "/api/data/abcdefghij1234567890", // 超过12位的字母加数字组合 "/api/12345678-59a1-1234-97b5-48f6d9a37c5d", } // 替换路径中的编码 for _, path := range paths { newPath := replaceNumbersWithID(path) fmt.Printf("Original: %s -> Replaced: %s\n", path, newPath) } } 运行结果 Original: /api/user/123 -> Replaced: /api/user/{:id} Original: /api/product/456/details -> Replaced: /api/product/{:id}/details Original: /api/order/789 -> Replaced: /api/order/{:id} Original: /api/user/profile -> Replaced: /api/user/profile Original: /api/data/%E6%88%91%E6%98%AF%E4%B8%80%E4%B8%AA%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE -> Replaced: /api/data/{:id} Original: /api/data/abcdefghij1234567890 -> Replaced: /api/data/{:id} Original: /api/12345678-59a1-1234-97b5-48f6d9a37c5d -> Replaced: /api/{:id}Golang实现简单的接口去重函数由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Golang实现简单的接口去重函数”