美文网首页
Go切片原理

Go切片原理

作者: _Gaara_ | 来源:发表于2022-04-25 14:40 被阅读0次
func main(){
    arr := [4]int{10, 20, 30, 40}
    slice := arr[0:2]
    testSlice1 := slice
    fmt.Println(arr[2])
    testSlice2 := append(append(append(slice, 1),2),3)
    testSlice3  := append(slice,110)
    slice[0] = 11

    fmt.Println(cap(testSlice1))
    fmt.Println(cap(testSlice2))
    fmt.Println(cap(testSlice3))

    fmt.Println(testSlice1[0])
    fmt.Println(testSlice2[0])
    fmt.Println(testSlice3[0])
    fmt.Println(testSlice3[2])
    fmt.Println(arr[2])

}

看代码猜结果。
切片是一个很小的对象,是对数组进行了抽象,并提供相关的操作方法。切片有三个属性字段:长度、容量和指向数组的指针。
切片扩容的两条规则:
如果切片的容量小于1024个元素,那么扩容的时候slice的cap就翻番,乘以2;一旦元素个数超过1024个元素,增长因子就变成1.25,即每次增加原来容量的四分之一。旧版本为每次三分之一。
如果扩容之后,还没有触及原数组的容量,那么,切片中的指针指向的位置,就还是原数组,如果扩容之后,超过了原数组的容量,那么,Go就会开辟一块新的内存,把原来的值拷贝过来,这种情况丝毫不会影响到原数组。
答案是

30
4
8
4
11
10
11
110
110

相关文章

  • Go切片原理

    看代码猜结果。切片是一个很小的对象,是对数组进行了抽象,并提供相关的操作方法。切片有三个属性字段:长度、容量和指向...

  • Go语言切片

    // //Go语言切片 // /* // go语言切片是对数组的抽象 // Go 数组的长度不可改变,在特定场景中...

  • 第03天(复合类型)_03

    13_数组做函数参数.go 14_数组指针做函数参数.go 15_切片的长度和容量.go 16_切片的创建.go ...

  • 15.Go_Slice(切片)

    Go 切片 定义切片 切片初始化 len()和cap()函数 空(nil)切片 切片拦截 append() 和co...

  • GO 中 map 的实现原理

    GO 中 map 的实现原理 嗨,我是小魔童哪吒,我们来回顾一下上一次分享的内容 分享了切片是什么 切片和数组的区...

  • 七、Go切片

    七、Go语言切片(Slice) Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就...

  • golang系列教程

    Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 G...

  • go切片

    1.go切片实现 具体实现请参考下面的文章Go 切片:用法和本质总结如下: 切片可以看做一个结构体,包含len,c...

  • go 切片

    数组的长度在定义之后无法修改,数组是值类型,每次传递都要产生一个副本切片并不是数组或数组指针,它是通过内部指针和相...

  • go切片

    切片不需要指定长度 案例1 简化编写 案例2 使用make函数 可以简写 案例3 切片充当参数和数组充当参数显然不...

网友评论

      本文标题:Go切片原理

      本文链接:https://www.haomeiwen.com/subject/dxvfyrtx.html