用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辅助编程工具
相关推荐
catoop10 分钟前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现Web极客码17 分钟前
我用 Claude 分析 Redis 哨兵日志,实现跨机房数据不一致自动对齐库库的数据库笔记33 分钟前
国产信创数据库的MySQL兼容性深度对比解析姚远Oracle ACE1 小时前
为什么无法连接到 PostgreSQL?ss2731 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 22 PostgreSQL实例与集群ss2731 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 21 PostgreSQL进程与内存架构介绍Henry-SAP3 小时前
SAP PP模块全景概览喜欢吃豆3 小时前
Better Auth 深度解析:从用户认证到企业级身份基础设施爱上纯净的蓝天3 小时前
不用云做 RAG:一个本地笔记问答工具的取舍与坑