用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辅助编程工具
相关推荐
2401_873479408 小时前
如何用IP离线库批量清洗订单IP,自动标注省市区?朝阳5818 小时前
MySQL 主从复制 — Docker 双机灾备方案py小王子8 小时前
期刊复现 | Python实现扇形小提琴图染翰8 小时前
生产级 MySQL 内存占用过高排查指南一 乐9 小时前
网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)guslegend9 小时前
第3节:智能体配置表设计godspeed_lucip9 小时前
LLM和Agent——专题5: LLM Ops 入门(2)技术钱9 小时前
RAG 开发 6 个阶段优化策略分析QFIUNE9 小时前
使用 MMseqs2 计算多个 DTI 数据集的蛋白序列相似度雷工笔记9 小时前
SQL系列2:PostgreSQL 日期时间字段类型选择指南