Go语言中的切片容量

一、什么是切片容量

在go语言中,切片是动态数组,其结构定义如下:


type SliceHeader struct {
    Data: uintprt
    Len: int
    Cap: int
}
  • Data: 用于存放数组数据
  • Len:用于存放已经初始化的内存长度
  • Cap:用于存放已申请的内存的长度,实际是:从头指针到尾指针到长度(或数组起始位置到结尾的长度),在对切片做切片操作时,Cap的计算规则是:(原切片尾地址-目标切片起始位置地址)/数据类型长度

二、切片初始化,切片操作示例

package main
import ( 
    "fmt"
)
func main() {
    // 初始化一个切片,长度为3, cap为4
    var eg = make([]int, 3, 4)
    //
    fmt.println(eg, cap(eg))
    // 输出为[0,0,0], 4; 这里初始化长度为3,而非4
    
    
    var a = []int{1, 2, 3, 4, 5}
    var b = a[1:4]    
    fmt.Println(len(b), cap(b))
    // 输出为len: 3, cap: 4这里cap是从a的索引为1的位置到a的末尾
}


文章标签:

评论(0)