当前位置: 首页 > news >正文

Golang实现简单粗暴的接口去重函数

背景

在某次项目中,我们需要采集所有路径(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}

相关文章:

  • 管理WSL实例 以及安装 Ubuntu 作为 WSL 子系统 流程
  • Deepseek本地部署指南:在linux服务器部署,在mac远程web-ui访问
  • 现代多核 CPU 的变化
  • TreeSet(单列集合)
  • Spring Boot(七):Swagger 接口文档
  • 【信息学奥赛一本通 C++题解】1286:怪盗基德的滑翔翼
  • 无人机遥感技术:从植被监测到生理参数反演的进阶之路
  • springboot+mybatis按条件分页查询多张表
  • PHP语法完全入门指南:从零开始掌握动态网页
  • 代码随想录 第一章 数组 209.长度最小的子数组
  • Postgresql的三种备份方式_postgresql备份
  • 如何在在 CentOS 中安装 OLama
  • 企业实战 - 深入解析Python爬虫中的JS逆向技术
  • 【机器学习】线性回归 多项式线性回归
  • web信息泄露 ctfshow-web入门web1-web10
  • mysql 学习15 SQL优化,插入数据优化,主键优化,order by优化,group by 优化,limit 优化,count 优化,update 优化
  • CentOS上远程连接SSH常用操作命令整理
  • 字符串哈希动态规划_6
  • 二.数据治理流程架构
  • 《程序人生》工作2年感悟
  • 潜江资讯网招聘司机/平台优化是什么意思
  • 潍坊网站建设公司推荐/百度下载安装2021
  • 动态网站建设包括哪些/产品推销方案
  • 电子商务网站分析/2022最新国际新闻10条简短
  • 网站空间 哪个公司好/搜索引擎营销的优缺点及案例
  • 网站首页流程图/优化关键词排名提升