MST

星途 面试题库

面试题:Go语言切片动态扩容机制相关问题

在Go语言中,当切片容量不足时会进行动态扩容。请描述Go语言切片动态扩容的具体规则,并举例说明如何通过代码观察到这种扩容现象。
28.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

切片动态扩容规则

  1. 小于1024个元素:如果切片的容量小于1024个元素,那么扩容时切片的容量会翻倍。
  2. 大于等于1024个元素:如果切片的容量大于等于1024个元素,那么扩容时切片的容量会增加原来容量的1/4。
  3. 内存分配:扩容时会重新分配内存,将原切片的数据复制到新的内存地址。

代码示例

package main

import (
    "fmt"
)

func main() {
    s := make([]int, 0, 5)
    for i := 0; i < 20; i++ {
        s = append(s, i)
        fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
    }
}

在上述代码中,我们初始化了一个容量为5的切片 s。然后通过 append 不断向切片中添加元素,并打印每次添加后的长度和容量。随着元素的添加,当容量不足时,会按照上述规则扩容,通过打印的容量变化即可观察到扩容现象。