Go内置append函数的复杂性是什么?字符串串联使用+呢?
append
+
我想通过附加两个切片(不包括该元素)从切片中删除一个元素。http://play.golang.org/p/RIR5fXq- Sf
nums := []int{0, 1, 2, 3, 4, 5, 6, 7} fmt.Println(append(nums[:4], nums[5:]...)) => [0 1 2 3 5 6 7]
http://golang.org/pkg/builtin/#append表示,如果目的地有足够的容量,则该分片为resliced。我希望“切片”是一个恒定时间的操作。我也希望同样适用于使用的字符串连接+。
resliced
所有这些都取决于所使用的实际实现,但是我将其基于标准Go和gccgo。
切片
切片意味着更改结构中的整数(切片是具有三个字段的结构:长度,容量和指向后备内存的指针)。
如果分片没有足够的容量,则append将需要分配新的内存并复制旧的内存。对于具有<1024个元素的片,它将使容量加倍;对于具有> 1024个元素的片,它将使容量增加1.25倍。
弦乐
由于字符串是不可变的,因此与每个字符串串联+将创建一个新字符串,这意味着复制旧字符串。因此,如果您要循环执行N次,则将分配N个字符串,并在N次左右复制内存。