首页 > 其他分享 >Go,你也可以的!-【4.3 切片】

Go,你也可以的!-【4.3 切片】

时间:2024-08-20 11:23:38浏览次数:5  
标签:4.3 int 元素 切片 var 数组 Go append

4.3 切片

切片在Go语言中的应用是比较广泛的,因为它的灵活性,在实际业务开发中,其实比数组使用的还要更多。

本节代码存放目录为lesson8

什么是切片

在上一节中我们讲到,数组的长度是固定的,不可以变化的,那么在实际的开发中,这样的特性其实对我们是会有一些限制的。

所以产生了切片这样的东西,也就是说切片的长度是可以变化的,这就是切片与数组的最大区别。

由于长度可变的特性,我们可以将切片称之为:动态数组。

声明切片

在上一节中我们讲到了数组的声明,其实切片的声明与数组差不多,由于切片是可以动态变化的,所以我们只需要将之前讲到的长度定义去掉即可。如下所示:

var sliceName []dataType

如下代码所示,根据上面的公式,我们可以定义多种数据类型的切片:

var a []int;
var b []int64;
var c []string;

也可以直接使用make来创建切片,如下所示:

var d []int = make([]int, 3)
var e []int = make([]int, 3, 4)

在上面的代码中,我们使用make来创建了切片,在代码中,出现了34这样的写法。

其实切片的底层可以理解为就是一个数组,所以第一种写法中的3就是代表着数组的长度为3,而在第二种写法中,3同样代表数组的长度,但是4却代表的是切片的容量。

在这里我们对容量不做过多的阐述,感兴趣的可以去看一下,对于初学者来说这个概念暂时可以不用深入。

与数组的相同点

由于切片的底层是数组,所以数组具备的操作方法,切片同样是具有的,列举如下:

  • 可以通过下标获取元素的值
  • 可以通过下标修改元素的值
  • 可以通过len获取切片的长度
  • 可以使用for i...的方式遍历切片
  • 可以使用for range的方式遍历切片

切片的新特性

数组具备的特性,切片基本是具备的,那么我们接下来主要说一下切片对比数组的新特性。

append

首先第一个就是append,从字面意思我们就可以看出,这个关键词的功能是追加,也就是向切片中增加元素。如下所示:

var a []int
a = append(a, 1)
fmt.Println(a[0])

输出结果为:

1

在上面的代码中,我们首先声明了一个名称为a的切片,之后我们通过append关键字向a切片中添加了一个元素1

在实际的开发中,我们还可以这样写:

a = append(a, 2, 3)
a = append(a, []int{4, 5}...)

在上面的代码中,我们同时向切片a中添加了多个元素。

第一种写法是每次都append一个元素。

第二种写法是一次append了一个数组,但是需要注意的是,我们使用了...,那么...它的作用其实就是把这个数组就打散,相当于最终还是逐个的将45添加到了切片a中。

copy

切片可以进行快速的复制,也就是将一个切片复制到一个新的切片中,如下所示:

var b = make([]int, len(a))
copy(b, a)
fmt.Println(b[0])

在上面的代码中,我们首先创建了一个长度与a一致的新切片b,之后使用copya的值赋值到了b切片中。

切片截取

在切片中,我们可以很方便的截取指定下标范围内的元素。如下所示:

fmt.Println(b[1:3])

输出结果如下:

[2 3]

在上面的代码中,我们通过1:3截取了下标为1、2的两个元素,代表的是包含1,不包含3,也就是右区间是开区间。

那么基于这一个功能,其实我们就可以实现元素的删除,比如需要删除下标为2的元素。

那么我们截取出2以前的元素、2以后的元素,将其添加到新的切片中,就实现了删除,其实原理也与数组差不多。

小结

在本节我们学习了切片的相关概念,切片与数组相似但又有一些新的特性,可以总结为以下几点:

  • 切片的最底层结构是数组

  • 数组包含的功能切片都包含

  • 切片是一个动态数组,长度可变化

  • 切片可以通过append快速添加元素

  • 切片可以通过copy复制

  • 切片可以截取指定的元素

标签:4.3,int,元素,切片,var,数组,Go,append
From: https://blog.csdn.net/qq_28796345/article/details/141352833

相关文章

  • 【pipenv】failed to create virtual enviroment: TypeError: canonicalize_version()
    环境:python--versionPython3.9.1pip--versionpip24.2pipshowpipenv2024.0.1pipshowsetuptools73.0.0未成功的解决方案:升级各个版本:pipinstall--upgradepipsetuptoolspipinstall--upgradepipenvpipenv--clearpipenvinstall--skip-lockpipinsta......
  • 计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析
    基于Spark的TapTap游戏数据分析系统技术栈:  -python  -django  -scrapy  -vue3  -spark  -element-plus  -echarts   功能板块:0.爬虫模块:  通过scrapy抓取taptap游戏网站数据,从分类页开始抓取全站游戏的数据1.首页......
  • Templates by Hanggoash
    快速幂点击查看代码inlineintpower(inta,intb,intp){ longlongans=1; while(b) { if(b&1)ans=ans*a%p; a=a*a%p; b>>=1; } returnans;}矩阵快速幂点击查看代码structMatrix{ intn,m; inta[maxn][maxn]; Matrix(){memset(a,0,sizeofa);}};......
  • 一个超全的go工具库Lancet
    文档官网https://www.golancet.cn安装使用go1.18及以上版本的用户,建议安装v2.x.x。因为v2.x.x应用go1.18的泛型重写了大部分函数。gogetgithub.com/duke-git/lancet/v2使用go1.18以下版本的用户,必须安装v1.x.x。目前最新的v1版本是v1.4.1。gogetgithub.c......
  • gRPC协议详解及其在Go语言中的使用指南
    说明gRPC是基于HTTP/2协议传输,使用ProtocolBuffers作为接口描述语言,并提供认证(authentication)、双向流(bidirectionalstreaming)和流量控制、阻塞或非阻塞绑定以及取消和超时(Deadlines)等功能的跨平台开源的高性能RPC框架。使用场景低延迟、高度可扩展的分布式系统。开发......
  • Django:F对象和Q对象
    一、F对象之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢?作用:用于类属性之间的比较#使用之前需要先导入fromdjango.db.modelsimportF#查询阅读量大于等于评论量的新闻NewsInfo.objects.filter(read__gte=F('comment'))可以在F对象上使用算数运算#查......
  • Django:查询基础语法
    一、数据准备1、在models.py中定义一个新闻和新闻类型的模型类classNewsInfo(models.Model):"""新闻表"""title=models.CharField(max_length=100,help_text='新闻标题',verbose_name='新闻标题',blank=True,default='')content=m......
  • 深入理解 Go 语言原子内存操作
            原子内存操作提供了实现其他同步原语所需的低级基础。一般来说,你可以用互斥体和通道替换并发算法的所有原子操作。然而,它们是有趣且有时令人困惑的结构,应该深入了解它们是如何工作的。如果你能够谨慎地使用它们,那么它们完全可以成为代码优化的好工具,而不会增加......
  • 高校爬虫可视化系统-基于python|Django|flask的高校爬虫可视化系统|大学数据抓取与展
    博主介绍:✌十余年IT大项目实战经验、在某机构培训学员上千名、专注于本行业领域✌技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫+大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战项目。主要内容:系统功能设计、开题报告......
  • CHC5223 Data Structures and Algorithms
    CHC5223DataStructuresandAlgorithms2023-2024-21of6AssignmentValue100%ofCourseworkResitIndividualworkBackgroundThesubwaysystemofacityisanetworkofundergroundorelevatedtrainsthatproviderapidtransitforpassengerswithint......