答案 0 :(得分:4)
答案 1 :(得分:3)
不修改容量的选择可能是性能优化。切片基本上是“动态数组”,它们打算提供数组容量无限的抽象。实际上,容量当然受系统内存的限制,但是如果切片处于容量并且你append
一个项目,Go将为阵列分配新内存以提供该容量(假设它是可用的,如果它是不是你的应用程序会恐慌)。
长度表示切片中的实际可索引项目计数,而容量则表示存在多少底层内存。当你进行那些重复操作时,没有立即需要释放内存,因此它仍然被分配,这就是切片容量保持不变但长度变为零的原因。
总的来说,这可能会带来更好的应用程序性能,因为如果后续语句将项目附加到切片,则内存仍然可用。在实践中,您通常不需要担心容量。我建议你把它放在脑海中。
最相关的时间,imo,就是当你从某些来源读取数据并且你知道这些数据的大小,或者至少有一个粗略的想法,并且你把它放在一个切片中。在这种情况下,如果使用适当的容量初始化切片,则应用程序的性能会更好。如果您没有提供长度或容量参数(如果只提供长度,则默认为长度),那么您可能会发现默认的切片增长效率相当低,或者至少会引入非常容易避免的低效率。