【刨根问底】创建slice是否填第二个参数0的区别

在Go语言中,创建切片(slice)时使用make函数有两种常见的方式,它们之间有细微的差别:

  1. slice := make([]string, 0)

    这种方式明确指定了切片的初始长度为0。这意味着你创建了一个容量和长度都是0的字符串切片。在这种形式中,你可以指定切片的类型(这里是[]string),并且设置其长度为0。由于长度和容量都是0,这个切片一开始是空的,没有任何元素。

  2. slice := make([]string)

    这种方式创建了一个切片,但没有指定其长度和容量。在这种情况下,make函数会创建一个长度和容量都是0的切片,但是它默认会分配一个初始容量。这个初始容量通常是底层数组的最小大小,比如在Go中,对于字符串切片,默认的初始容量可能是2(这个值可能会根据Go的版本和实现有所不同)。这意味着虽然长度是0,但是你可以在不触发重新分配内存的情况下至少添加两个元素。

两种方式都会创建一个空的字符串切片,但是第二种方式在内部会预分配一些容量,这可以减少在添加元素时可能发生的内存重新分配的次数。如果你预计会向切片中添加一些元素,使用make([]string)(或者等价的make([]string, 0))可能会稍微高效一些,因为它避免了第一次添加元素时的内存分配。

总结来说,两种方式在功能上没有太大区别,都会创建一个空的字符串切片,但是第二种方式可能会在内部预分配一些额外的空间,这有助于提高在添加元素时的性能。在实际编程中,选择哪种方式取决于你的具体需求和偏好。


【刨根问底】创建slice是否填第二个参数0的区别
https://leiqi.top/2024-11-23-b80d94088ccd.html
作者
Lei Qi
发布于
2024年11月23日
许可协议