首页 > 解决方案 > 何时选择容器/列表而不是切片

问题描述

我没有遇到任何问题,这是切片无法解决的。

interface{} 根据列表实现,列表迭代也不支持任何插入到列表最终创建一个将值包装到 Range 的新元素结构。我发现一些文章说永远不要list.List在生产中使用。

只是想知道,为什么它存在于 go 源包 [ https://golang.org/pkg/container/list/]

这里有人,在生产中使用过列表并获得了一些优势吗?

标签: listgoslice

解决方案


list.List双向链表的实现。切片是对数组的抽象。切片提供功能丰富的数组,包括无需复制数据的增长数组,无需重新分配或复制即可获取切片的“切片”。
这一切都归结为用例。链表本质上是一个不断增长的项目列表,不需要复制任何数据。链表非常适合必须在一个方向上遍历的增长数据。如果必须任意访问数据(从没有游标的任何索引),或者必须从中间动态添加和删除数据,则数组/切片是完美的。

这是一个普遍的答案。最重要的是,90% 的时间你都不需要 list.List。切片就够了。


推荐阅读