go语言切片Slice和数组Array对比panic runtime error index out of range问题解决_array index out of range

二、go slice实战案例

1.slice创建、使用

2、slice的长度和容量概念理解

3. 切片扩容及slice panic: runtime error: index out of range

总结



前言

在go语言的学习历程当中,slice数据类型引起了我的好奇心。为啥不直接使用Slice,是人性的扭曲还是道德的沦丧,下面让我们一探究竟~

一、go slice是什么

go语言中的slice是一个基于Array封装的数据结构,go语言中slice的使用频率远高于array,其身影频频出现在源码实现当中。slice相对于Array的优点就是其可以动态调整自己的size,不像Array的Size是固定的。

二、go slice实战案例

1.slice创建、使用

slice的创建有两个方法分别是使用字面量定义和使用make函数。除过slice创建,其他slice的生成办法均是从现有slice分片或者array上做slice分片操作。

slice创建代码:

package main

import (
	"fmt"
	"reflect"
)

func main() {
	//字面创造Slice
	sliceOne := []string{"a", "b"}
	//使用make函数创造slice
	sliceTwo := make([]string, 10)
	sliceThree := make([]int, 10)

	fmt.Printf("使用字面量创建的slice%s\n",reflect.ValueOf(sliceOne).String())
	fmt.Printf("使用make函数创建的slice:%s\n",reflect.ValueOf(sliceTwo).String())
	fmt.Printf("使用make函数创建的slice:%s\n",reflect.ValueOf(sliceThree).String())

}

程序输出:

使用字面量创建的slice<[]string Value>
使用make函数创建的slice:<[]string Value>
使用make函数创建的slice:<[]int Value>

Process finished with the exit code 0

2、slice的长度和容量概念理解

学习过程中,很多小伙伴会对slice的长度和容量问题有着很多混淆。

这个地方可以把切片比喻成一个可以装10个苹果的袋子,现在的袋子里面有三颗苹果。切片的长度就是袋子已经装的果子的个数,目前是3个。切片的容量就是这个袋子一共能装多少个果子,对于这个袋子来说就是10。那么把代码替换成切片,把苹果替换成元素,是不是就懂了撒~

下面就是该问题的处理办法就是直接去官方,看源码。看看第一手资料怎么讲!

长度:slice中拥有的元素个数,如果slice是nil的话,则元素个数长度是0
英文:the number of elements in v; if v is nil, len(v) is zero

容量:slice切片的长度能够到达的最大值
英文:Slice: the maximum length the slice can reach when resliced;

代码验证环节:

package main

import (
	"fmt"
 )

func main() {
	sliceOne := []string{"a", "b"}
	strings := sliceOne[0:1]
	fmt.Printf("切片的长度:%d\n",len(strings))
	fmt.Printf("切片的容量:%d\n",cap(strings))
}

代码结果输出:

切片的长度:1
切片的容量:2

代码原理解析:

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

[外链图片转存中…(img-lUtBOlri-1725685823971)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值