go语言学习 - 切片存储原理

golang

从数组到切片

数组通过切片操作可以生成切片,切片是引用数据类型,源数组改变,切片就会变。切片在内存中包含三个数据。开始地址、长度、容量;容量是切片开始位置到数组最后的长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import "fmt"

func main() {
var a = [5]int{1, 2, 3, 4, 5}
// 生成切片slice,slice全切
var slice = a[:]
fmt.Println(slice)
// 切片slice也可以进行再切片,由于是引用数据,其实就是对源数据a进行切片
var newSlice = slice[1:3]
fmt.Println(newSlice)
// 修改newSlice[1]其实就是修改a[2]
newSlice[1] = 233
// 下面数据都发生了变化
fmt.Println(a)
fmt.Println(slice)
fmt.Println(newSlice)
var b = [5]int{1, 2, 3, 4, 5}
var c = b[1:3]
// cap查看容量
fmt.Println(len(c), cap(c))
}

golang

切片的声明及赋值

1
2
3
var s = []int{11, 12, 13, 14, 15}
s[4] = 566
fmt.Println(s)