将空切片附加到另一个切片可以在golang中处理分配吗?

问题描述 投票:0回答:2

我有一个关于 golang 中“append”函数的小问题:

我有一个 slice1 和一个调用 for 循环并返回一些 slice2 的函数,它也可以为空。那么问题是,如果这个函数频繁返回空切片,golang会如何处理这种情况:什么类型的代码会更优化:

  1. 在执行追加操作之前使用检查 'if len(slice2) != 0'
  2. 只需将所有返回的切片附加到 slice1

这两种情况实际上决定使用哪一种吗?

我已经尝试了两种带有空切片的情况,但我没有看到区别,也许我错过了一些东西?

go memory slice allocation
2个回答
0
投票

当您使用append时,会在内存中创建一个新切片来存储结果。如果您附加一个空切片,则两种情况下的输出都保持相同。因此,在操作之前添加简单的检查应该比生成原始切片的副本更快。在追加之前检查切片是否为空可以节省一些不必要的操作。


0
投票

如果没有添加元素,则不会分配新数组:

来自文档

append 内置函数将元素追加到切片的末尾。如果它有足够的容量,则会对目的地进行重新切片以容纳新元素。

当然,容量始终足以容纳零个新元素。

© www.soinside.com 2019 - 2024. All rights reserved.