golang学习之slice

Posted ayaoyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang学习之slice相关的知识,希望对你有一定的参考价值。

1.slice本质

pointer + len + cap

pointer 指向一段真实数组

len 从起始地址指向元素开始的数量
cap 此数组的容量(append时,容量不够会自动扩容)

 

2.slice的有趣实验

 1 func main() 
 2     var array []int32 = []int321, 2, 3, 4, 5, 6, 7, 8, 9, 10
 3     var slice = array[0:10]
 4     fmt.Println("原始array[0]:", array[0])
 5     slice[0] = 2
 6     fmt.Println("新的array[0]:", array[0])
 7     slice = append(slice, 11)
 8     //fmt.Println("新的array[10]:", array[10])
 9     slice[0] = 3
10     fmt.Println("新的array[0]:", array[0])
11     fmt.Println("新的slice[0]:", slice[0])
12 

输出结果:

技术图片

 

 前两个输出,修改slice的值,原始的也被修改,表明slice的本质是一个指针

后两个输出,修改slice的值,原始的没有再被修改,因为slice的cap不够,会自动扩容(实验尝试发现扩容一般为原cap的两倍,且是4的倍数)

  扩容后slice是一个新的地址,跟原来的就不相关了。

以上是关于golang学习之slice的主要内容,如果未能解决你的问题,请参考以下文章

golang学习之interface与其它类型转换

golang学习之奇葩的time format

golang学习之go连接mysql

golang 学习之grpc+ protobuf

GoLang学习之变量定义和初始化

knockout学习资料