go语言学习(四):数组和切片.docx

上传人:A*** 文档编号:142724744 上传时间:2020-08-22 格式:DOCX 页数:3 大小:11.40KB
返回 下载 相关 举报
go语言学习(四):数组和切片.docx_第1页
第1页 / 共3页
go语言学习(四):数组和切片.docx_第2页
第2页 / 共3页
go语言学习(四):数组和切片.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《go语言学习(四):数组和切片.docx》由会员分享,可在线阅读,更多相关《go语言学习(四):数组和切片.docx(3页珍藏版)》请在金锄头文库上搜索。

1、go语言学习(四):数组和切片在go语言中,数组和切片都是集合类型,他们都是用来存储同一种类型的元素。1.数组类型的长度是固定的,而切片类型的长度是可变长的。如下面代码声明一个长度为5的数组s1和长度为5的切片s2,s1 := 5int1,2,3,4,5s2 := int1,2,3,4,5但是s1是不可变的,而s2是可变的,可以增加元素,长度随着元素数量而增长。因此数组是一个值类型,而切片是一个引用类型。2.切片的底层是一个数组,如下面代码:s3是s4的底层数组,s3 := int1, 2, 3, 4, 5, 6, 7, 8s4 := s33:6fmt.Printf(The length of

2、 s4: %dn, len(s4)fmt.Printf(The capacity of s4: %dn, cap(s4)fmt.Printf(The value of s4: %dn, s4)上面代码输出如下:The length of s4: 3The capacity of s4: 5The value of s4: 4 5 6因为切片S4取值从数组S3的下标4开始到下标6(不包含),所以长度是3,容量是53.切片是可以扩容的,往切片中增加元素时,当切片容量不够时,切片会进行扩容。如果扩容前切片容量小于1024,那扩展为原容量的2倍。如果扩容前切片容量大于等于1024,那扩展为原容量的1.

3、25倍,如果还不够,会再次扩展为原来的1.25倍。如果追加元素太多,扩展为2倍还不够,会直接扩展为新的长度。 / 示例1。 s6 := make(int, 0) fmt.Printf(The capacity of s6: %dn, cap(s6) for i := 1; i = 5; i+ s6 = append(s6, i) fmt.Printf(s6(%d): len: %d, cap: %dn, i, len(s6), cap(s6) fmt.Println() / 示例2。 s7 := make(int, 1024) fmt.Printf(The capacity of s7: %d

4、n, cap(s7) s7e1 := append(s7, make(int, 200).) fmt.Printf(s7e1: len: %d, cap: %dn, len(s7e1), cap(s7e1) s7e2 := append(s7, make(int, 400).) fmt.Printf(s7e2: len: %d, cap: %dn, len(s7e2), cap(s7e2) s7e3 := append(s7, make(int, 600).) fmt.Printf(s7e3: len: %d, cap: %dn, len(s7e3), cap(s7e3) fmt.Printl

5、n() / 示例3。 s8 := make(int, 10) fmt.Printf(The capacity of s8: %dn, cap(s8) s8a := append(s8, make(int, 11).) fmt.Printf(s8a: len: %d, cap: %dn, len(s8a), cap(s8a) s8b := append(s8a, make(int, 23).) fmt.Printf(s8b: len: %d, cap: %dn, len(s8b), cap(s8b) s8c := append(s8b, make(int, 45).) fmt.Printf(s8

6、c: len: %d, cap: %dn, len(s8c), cap(s8c)上面代码的输出如下:The capacity of s6: 0s6(1): len: 1, cap: 1s6(2): len: 2, cap: 2s6(3): len: 3, cap: 4s6(4): len: 4, cap: 4s6(5): len: 5, cap: 8The capacity of s7: 1024s7e1: len: 1224, cap: 1280s7e2: len: 1424, cap: 1696s7e3: len: 1624, cap: 2048The capacity of s8: 10

7、s8a: len: 21, cap: 22s8b: len: 44, cap: 44s8c: len: 89, cap: 96因为操作系统内存对齐的原因,扩容后的切片并不能恰好成为原切片的2倍或1.25倍4.当切片扩容时,原切片和底层数据并没有被替换,而且生成了一个新的底层数组和切片。当切片无需扩容时,append函数会返回一个指向原底层数组的新切片,但是当需要扩容时,append函数返回一个指向新底层数组的新切片。 / 示例1。 a1 := 7int1, 2, 3, 4, 5, 6, 7 fmt.Printf(a1: %v (len: %d, cap: %d)n, a1, len(a1),

8、cap(a1) s9 := a11:4 /s90 = 1 fmt.Printf(s9: %v (len: %d, cap: %d)n, s9, len(s9), cap(s9) for i := 1; i = 5; i+ s9 = append(s9, i) fmt.Printf(s9(%d): %v (len: %d, cap: %d)n, i, s9, len(s9), cap(s9) fmt.Printf(a1: %v (len: %d, cap: %d)n, a1, len(a1), cap(a1) fmt.Println()上面代码输出:a1: 1 2 3 4 5 6 7 (len: 7, cap: 7)s9: 2 3 4 (len: 3, cap: 6)s9(1): 2 3 4 1 (len: 4, cap: 6)s9(2): 2 3 4 1 2 (len: 5, cap: 6)s9(3): 2 3 4 1 2 3 (len: 6, cap: 6)s9(4): 2 3 4 1 2 3 4 (len: 7, cap: 12)s9(5): 2 3 4 1 2 3 4 5 (len: 8, cap: 12)a1: 1 2 3 4 1 2 3 (len: 7, cap: 7)参考:极客时间

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号