Golang基础——数据类型:切片
切片:
大小不确定的放在堆区(实际值),固定长度的在栈区(变量名:存地址)
添加切片数据的时候,地址可能发生改变,当前内存不能连续并且足够大。
扩容:<=1024 :两倍;> 1024 :每次扩容上一次的 1 / 4
引用传递
var a []int
a = append(a, 1, 2, 3, 4, 5)
fmt.Println(a)
fmt.Printf("%T\n", a)
fmt.Println(len(a)) // 长度
fmt.Println(cap(a)) // 容量
var b = []int{1, 2, 3}
fmt.Println(b)
c := []int{1, 2, 3}
fmt.Println(c)
d := make([]int, 5, 10) // 长度 5,容量 10
fmt.Println(d)
fmt.Println(len(d))
fmt.Println(cap(d))
e := make([]int, 3)
fmt.Println(e)
e[0] = 111
fmt.Println(e)
切片截取固定长度:
s := []int{1,2,3,4,5}
s[0:3:5] // 从0到3,取左不取右,s的容量为 5,容量不能超过原来的切片的容量
// 地址和原来的切片重合,是原来切片的一部分,还是原来的地址。所以修改切片的内容,会影响原来的。
切片拷贝:
a := []int{1, 25, 5} // [1 25 5]
var c []int
b := make([]int, 1)
copy(b, a) // 存储两个地址 a -> b
copy(c, a)
fmt.Println(a)
fmt.Println(b) // 有几位填充几位 [1]
fmt.Println(c) // []
切片当做函数参数,引用传递:
但是,append函数,向切片中添加数据时,地址将可能发生改变,不影响实参的地址。相当于,如果内存够用,就用原来的;不够用了,就新开辟内存地址。但是原来的实参切片还在原来的地址。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2020-03-30 模块——常用模块
2020-03-30 检索文件大小,验证码生成,下载条,copy文件