【golang】数组和切片

本文探讨了Golang中的数组和切片。数组在Golang中是不可变的,而切片则是一个可变长度的序列,基于数组并提供了一种灵活的方式去访问数组部分。切片包含长度、容量和指针属性,它们可以作为指向数组某个区域的引用。通过示例展示了切片的创建、使用和修改,以及如何通过`append`方法动态扩展切片容量。同时,文章指出切片不能作为map的键,因为切片无法直接比较。
摘要由CSDN通过智能技术生成

【golang】数组和切片

在golang中,有一个“罕见”的复合类型,叫切片,切片是基于数组的,golang和其它语言不一样,在golang中,数组是不可变的,对数组进行类型转换等操作都会导致golang隐式的申请一块内存,然后将原数组的内容复制到这块内存。

数组是不可变的,这就决定了字符串也是不可变的,因为字符串底层就是一个byte数组实现的。

在实际的开发当中,我们经常使用的是切片,而不是数组。

切片

切片是基于数组的,它表示一个拥有相同类型元素的可变长度的序列

切片是一种轻量级的数据结构,可以用来访问数组的部分或者全部的元素,emmmmm,可以把它看作一个指向数组的某块区域的引用,这块区域可以是数组的部分,也可以是数组的全部。

切片包含长度,容量,指针三个属性,指针指向的是数组的某块区域,容量一般是数组的长度,而长度指的是切片开始的位置到切片结束的位置的长度,而容量是指切片开始的位置到数组结束的位置,看得出来,切片是依赖于数组的

假设现在有这样一个整型数组

arr := [...]int{
  1,2,3,4,5}

这里写图片描述

现在创建一个基于该数组的切片

slice := arr[0:3]

这里写图片描述

现在的slice的指针指向的就是arr的第一个元素,而它的长度是3,容量是整个数组的长度5

现在来看一下切片的实际应用

比如有时候我们想要频繁的修改一个数组的元素,那么我们从一开始就可以创建一个切片

比如创建一个1, 2, 3, 4, 5的整型的切片

slice := []int{
  1,2,3,4,5}
slice[1] = 0

fmt.Println(slice) //1 0 3 4 5

这段切片的声明只比上面的数组声明少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值