Go 的 slice 和数组有什么区别?append 有什么坑?
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
数组长度固定([5]int),是值类型、传参整体拷贝;slice 是动态视图([]int),底层是 ptr+len+cap 结构体,传参传引用。append 的坑:① 容量不足时触发扩容(翻倍或 1.25 倍),底层数组会换新,旧 slice 仍指向旧数组;② 多个 slice 共享底层数组时,一个 append 可能意外修改另一个的数据;③ 频繁 append 多次扩容浪费性能,建议 make([]T, 0, n) 预分配。日常几乎都用 slice。
回复
0 条回复