正文
- 切片可以通过指定索引区间获得1个子切片
- 切片规则: clice[start:end],规则是前包后不包
- start不写为0
- end默认为len(slice)长度,如果写可以不是长度值
- start,end不能超过容量值
- len截取段的元素个数,end-start
- cap从header中的pointer指针开始向底层数组末尾数,还有几个元素容量
len控制各个共同使用底层数组的可见范围
cap没有扩容之前还有几个位置可用
首地址觉得容量还有多少,如果首地址偏移1,容量就会-1,偏移2,容量就会-2
子切片:有没有肯构造一个新的底层数组? 我用的是你部分元素,不会导致扩容,共用1个底层数组
1.复习:
| |
| func main() { |
| s1 := []int{10, 30, 50, 70, 90} |
| fmt.Printf("s1 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s1, &s1[0], len(s1), cap(s1), s1) |
| for i, _ := range s1 { |
| fmt.Println(i, &s1[i]) |
| } |
| |
| s2 := s1 |
| fmt.Printf("s2 %p |标量值:%p %d, %d|, %v \n", &s2, &s2[0], len(s2), cap(s2), s2) |
| } |

- 结果:

2.子切片---全切-以下子切片不撑爆底层数组
| s3 := s1[:] |
| |
| |
| |
| |
| |
| fmt.Printf("s3 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s3, &s3[0], len(s3), cap(s3), s3) |

3.切片去头

| s4 := s1[1:] |
| |
| |
| |
| |
| |
| fmt.Printf("s4 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s4, &s4[0], len(s4), cap(s4), s4) |
结果

4.切片去头去尾

| s5 := s1[1:4] |
| |
| |
| |
| |
| |
| fmt.Printf("s5 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s5, &s5[0], len(s5), cap(s5), s5) |
结果

5.去尾

| s6 := s1[:4] |
| |
| |
| |
| |
| |
| fmt.Printf("s6 标量值地址:%p |标量值:%p %d, %d|, %v \n", &s6, &s6[0], len(s6), cap(s6), s6) |
| |
结果

6.切片长度为0空切片,长度为0不能访问--1

| s7 := s1[1:1] |
| |
| |
| |
| |
| |
| fmt.Printf("s7 标量值地址:%p |没法显示:p %d, %d|, %v \n", &s7 , len(s7), cap(s7), s7) |
结果

7. 4:4切片问题--2
| , cap(s8), s8) |
结果

8.空切片--3
| s9 := s1[5:5] |
| |
| fmt.Printf("s9 标量值地址:%p |没法显示:因为s8切完长度为0,go语言不让访问, %d, %d|, %v \n", &s9 , len(s9), cap(s9), s9) |
| |
结果

9.切片append
| s9 = append(s9, 11) //扩容 |
| fmt.Printf("s9 标量值地址:%p |标量值:%p ,%d, %d|, %v \n", &s9, &s9[0], len(s9), cap(s9), s9) |
| s9 = append(s9, 12) //扩容 |
| fmt.Printf("s9 标量值地址:%p |标量值:%p ,%d, %d|, %v \n", &s9, &s9[0], len(s9), cap(s9), s9) |
| s9 = append(s9, 13) //扩容 |
| fmt.Printf("s9 标量值地址:%p |标量值:%p ,%d, %d|, %v \n", &s9, &s9[0], len(s9), cap(s9), s9) |
| s9 = append(s9, 13) //扩容 |
| fmt.Printf("s9 标量值地址:%p |标量值:%p ,%d, %d|, %v \n", &s9, &s9[0], len(s9), cap(s9), s9) |
结果

总结

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具