96SEO 2026-02-19 19:43 9
//长度为3容量为5底层数组长度为5元素长度为3所以显示[0,0,0]使用切片要关注容量cap和长度len两个属性

切片本质是对底层数组一个连续片段的引用。
此片段可以是整个底层数组也可以是由起始和终止索引标识的一些项的子集。
因为下面是底层数组所以数组的容量是不可以改变的。
元素内容能变的。
理解切片保存的就是标头值该值包括指向的实际存储的地址实际长度和容量的长度
https://github.com/golang/go/blob/master/src/runtime/slice.go
注意上面三个结构体的属性都是小写所以包外不可见。
len函数取就是len属性cap函数取cap属性。
第一个元素的地址由于第一个元素存在底层数组中数组的第一个元素地址就是数组的地址指针可以通过取底层数组的第一个元素的地址即切片第一个元素的地址追加
0]结论s1被重新复制了但是S1的地址没有变化底层数组的地址发生了变化追加
//定义了一个长度为2容量为5的切片fmt.Printf(s1
append返回新的header信息覆盖fmt.Printf(s1
s1的地址和底层数组的地址都没有发生变化这是因为没有超过容量底层共用同一个数组但是对底层数组使用的片段不一样。
func
append返回新的header信息使用新的变量存储fmt.Printf(s2
结论我们发现有新的header值因为切片的重新赋值所以s2有新的地址但是s2指向的底层数组还是一样的因为容量还没有超出。
func
-1]结论目前三个切片底层用同一个数组只不过长度不一样func
底层数组的起始地址也发生了变化相当于重新在内存中开辟了一块地址并且容量变成了之前的2倍结论
append一定返回一个新的切片但本质上来说返回的是新的Headerappend可以增加若干元素
原切片使用原来的底层数组返回的新切片也使用这个底层数组返回的新切片有新的长度原切片长度不变
生成新的底层数组新生成的切片使用该新数组将旧元素复制到新数组其后追加新元素原切片底层数组、长度、容量不变
老版本实际上当扩容后的cap1024时扩容翻倍容量变成之前的2倍当cap1024时变成
新版本1.18阈值变成了256当扩容后的cap256时扩容翻倍容量变成之前的2倍当
扩容是创建新的底层数组把原内存数据拷贝到新内存空间然后在新内存空间上执行元素追加操作。
切片频繁扩容成本非常高所以尽量早估算出使用的大小一次性给够建议使用make。
常用make([]int,
选取当前切片的一段等到一个新的切片共用底层数据因为不扩容但是header中的三个属性会变切片可以通过指定索引区间获得一个子切片格式为slice[start:end]规则就是前包后不包。
0xc000008078,0xc0000103f0,5,5,[10
0xc0000080a8,0xc0000103f0,5,5,[10
0xc000008078,0xc0000103f0,5,5,[10
0xc0000080a8,0xc0000103f0,5,5,[10
0xc0000080d8,0xc0000103f0,5,5,[10
这个代表的就是从头到尾的元素都要和s1共用一个底层数组func
0xc000008078,0xc0000103f0,5,5,[10
0xc0000080a8,0xc0000103f8,4,4,[30
0xc000092060,0xc0000be060,5,5,[10
0xc000092090,0xc0000be068,3,4,[30
0xc000008078,0xc0000103f0,5,5,[10
0xc0000080a8,0xc0000103f0,4,5,[10
0xc000008078,0xc0000103f0,5,5,[10
0xc0000080a8,0,4,[]结论首地址偏移1个元素长度为0cap原cap-start
由于长度为0所以不能s7[0]报错为s7增加一个元素s1、s7分别是什么
0xc000008078,0xc0000103f0,5,5,[10
0xc0000080a8,0xc0000103f8,1,4,[100]
0xc000008078,0xc0000103f0,5,5,[10
0xc000008078,0xc0000103f0,5,5,[10
首地址偏移4个元素长度为0容量为1因为最后一个元素没在切片中共用底层数组func
0xc000008078,0xc0000103f0,5,5,[10
0xc0000080a8,0,0,[]增加元素会怎么样s1、s9分别是什么func
0xc000008078,0xc0000103f0,5,5,[10
0xc0000080a8,0xc00001a0e8,1,1,[100]切片总结
使用slice[start:end]表示切片切片长度为end-start前包后不包start缺省表示从索引0开始end缺省表示取到末尾包含最后一个元素特别注意这个缺省值是len(slice)即切片长度不是容量
start和end都缺省表示从头到尾start和end同时给出要求end
start、end最大都不可以超过容量值假设当前容量是8长度为5有以下情况
a1[:]可以共用底层数组相当于对标头值的拷贝也就是指针、长度、容量都一样a1[:8]可以end最多写成8(因为后不包)a1[:9]不可以。
该切片长度、容量都为8
这8个元素都是原序列的一旦append就扩容a1[8:]不可以end缺省为当前长度5等价于a1[8:5]a1[8:8]可以但这个切片容量和长度都为0了。
注意和a1[:8]的区别a1[7:7]可以但这个切片长度为0容量为1a1[0:0]可以但这个切片长度为0容量为8a1[1:5]可以这个切片长度为4容量为7相当于跳过了原序列第一个元素
切片刚产生时和原序列数组、切片开始共用同一个底层数组但是每一个切片都自己独立保存着指针、cap和len一旦一个切片扩容就和原来共用一个底层数组的序列分道扬镳从此陌路
a1[8:8]可以但这个切片容量和长度都为0了。
注意和a1[:8]的区别
a1[1:5]可以这个切片长度为4容量为7相当于跳过了原序列第一个元素
切片刚产生时和原序列数组、切片开始共用同一个底层数组但是每一个切片都自己独立保存着指针、cap和len一旦一个切片扩容就和原来共用一个底层数组的序列分道扬镳从此陌路
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback