MST

星途 面试题库

面试题:Go语言切片slice底层如何扩容

在Go语言中,当切片容量不足时会自动扩容,请描述Go语言切片底层扩容的具体规则和过程。
20.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 扩容规则
    • 如果新的容量(newCap)小于2倍的旧容量(oldCap),则新容量会设置为2倍的旧容量。
    • 如果新的容量大于等于2倍旧容量,直接使用新容量。
    • 如果旧切片的容量小于1024,新容量会直接设置为旧容量的2倍。
    • 如果旧切片的容量大于等于1024,新容量会在旧容量的基础上增加1/4。
  2. 扩容过程
    • 首先根据上述规则计算出新的容量。
    • 然后分配一个新的底层数组,大小为新计算出的容量。
    • 接着将旧切片中的元素逐个复制到新的底层数组对应的位置上。
    • 最后,切片指向新的底层数组,完成扩容。

例如:

package main

import (
    "fmt"
)

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

在这个例子中,初始容量为5,随着元素不断追加,容量会按照上述规则扩容。