深入理解 go slice
看下面的几个例子:
func modifyEle(array []int) {
for i := 0; i < len(array); i++ {
(array)[i] = i
}
fmt.Printf("modify int array len = %d, cap = %d \n", len(array), cap(array))
}
func main() {
array := []int{4, 3, 2, 1, 0}
fmt.Println(array)
fmt.Printf("modify befort array len = %d, cap = %d \n", len(array), cap(array))
modifyEle(array)
fmt.Printf("modify after array len = %d, cap = %d \n", len(array), cap(array))
fmt.Println(array)
}
结果:
[4 3 2 1 0]
modify befort array len = 5, cap = 5
modify in array len = 5, cap = 5
modify after array len = 5, cap = 5
[0 1 2 3 4]
上面这个例子中,slice 可以被修改。 再看一个例子。
func deleteEle(array []int) {
array = array[:1]
fmt.Printf("delete in array len = %d, cap = %d \n", len(array), cap(array))
}
func main() {
array := []int{4, 3, 2, 1, 0}
fmt.Println(array)
fmt.Printf("delete befort array len = %d, cap = %d \n", len(array), cap(array))
deleteEle(array)
fmt.Printf("delete after array len = %d, cap = %d \n", len(array), cap(array))
fmt.Println(array)
}
结果
[4 3 2 1 0]
delete befort array len = 5, cap = 5
delete in array len = 1, cap = 5
delete after array len = 5, cap = 5
[4 3 2 1 0]
在上面这个例子中,删除slice 里的元素好像没成功。 继续看下面的例子
func deleteEle(array *[]int) {
*array = (*array)[:1]
fmt.Printf("delete in array len = %d, cap = %d \n", len(*array), cap(*array))
}
func main() {
array := []int{4, 3, 2, 1, 0}
fmt.Println(array)
fmt.Printf("delete befort array len = %d, cap = %d \n", len(array), cap(array))
deleteEle(&array)
fmt.Printf("delete after array len = %d, cap = %d \n", len(array), cap(array))
fmt.Println(array)
}
结果
[4 3 2 1 0]
delete befort array len = 5, cap = 5
delete in array len = 1, cap = 5
delete after array len = 1, cap = 5
[4]
继续看例子
func modifyEle(array []int) {
array = append(array, 1)
for i := 0; i < len(array); i++ {
(array)[i] = i
}
fmt.Printf("modify in array len = %d, cap = %d \n", len(array), cap(array))
}
func main() {
array := []int{4, 3, 2, 1, 0}
fmt.Println(array)
fmt.Printf("modify befort array len = %d, cap = %d \n", len(array), cap(array))
modifyEle(array)
fmt.Printf("modify after array len = %d, cap = %d \n", len(array), cap(array))
fmt.Println(array)
}
这个例子跟第一个很像,但是结果完全不同。
[4 3 2 1 0]
modify befort array len = 5, cap = 5
modify in array len = 6, cap = 10
modify after array len = 5, cap = 5
[4 3 2 1 0]
理解了这几个例子,就完全理解 go slice 了。
本文原创自博客园 地址:https://www.cnblogs.com/Heoric/
我想要知道上帝是如何创造这个世界的。我对这个或那个现象不感兴趣,我要知道的是他的思想。其他都是细节。
我想要知道上帝是如何创造这个世界的。我对这个或那个现象不感兴趣,我要知道的是他的思想。其他都是细节。
分类:
go
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库