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的主要内容,如果未能解决你的问题,请参考以下文章