用map实现slice去重最常用也最稳妥,核心是将元素作为key存入mapinterface{}struct{},再遍历构建新slice;注意元素需可比较,结构体不可含slice/map/func,该方法保持顺序但不并发安全。用 map 实现 slice 去重最常用也最稳妥Go 没有内置去重函数,map 是最直接、可读性好、性能可控的方案。核心思路是把元素当 key 存进 mapinterface{}struct{}(或具体类型),再遍历原 slice 构建新 slice。常见错误是用 mapstringbool 存字符串却忽略结构体、指针等不可比较类型;或者用 mapstringint 误以为要计数------去重不需要值,用 struct{} 更省内存。基础示例(字符串 slice):items := \[\]string{"a", "b", "a", "c"}seen := make(mapstringstruct{})var result \[\]stringfor _, item := range items { if _, exists := seenitem; !exists { seenitem = struct{}{} result = append(result, item) }}如果元素是结构体,必须确保它所有字段都可比较(不能含 slice、map、func);否则得转成 JSON 字符串或自定义哈希键注意:该方法保持原始顺序,但不保证并发安全;多 goroutine 写同一 map 必须加锁或改用 sync.Map(仅适合读多写少场景)对 \[\]int 等基本类型,可考虑 sort + 双指针减少内存分配当 slice 很大且允许重排顺序时,先排序再双指针去重比建 map 更省内存,尤其 \[\]int、\[\]int64 这类小对象。容易踩的坑是忘记排序------双指针依赖相邻重复,未排序结果完全错误;还有人用 sort.Ints() 后直接修改原 slice,导致上游逻辑异常。立即学习"go语言免费学习笔记(深入)"; 文心快码 文心快码(Comate)是百度推出的一款AI辅助编程工具
相关推荐
小猴子爱上树9 分钟前
Temu批量视频翻译Python实现方案疯狂打码的少年17 分钟前
【软件工程】需求工程:需求获取与需求分析Database_Cool_18 分钟前
阿里云 PolarDB-X vs TiDB 分布式数据库选型指南数据库小学妹19 分钟前
分布式数据库架构怎么选?三种路线对比+迁移避坑指南X1A0RAN23 分钟前
Python 并发请求性能优化实战陈同学xxx28 分钟前
Hermes Agent 接入飞书,在手机上随时聊天卷无止境33 分钟前
Python 中基于 Qt 的 GUI 库授权方式全解析桑榆肖物36 分钟前
在 .NET MAUI 里接入 PP-OCRv6 文本检测实现查找并点击卷无止境1 小时前
Guardrails.ai:为大语言模型加一道"安全阀"味悲1 小时前
SQL注入从入门到实战