广告
返回顶部
首页 > 资讯 > 精选 >Go slice切片如何使用
  • 823
分享到

Go slice切片如何使用

2023-07-02 09:07:34 823人浏览 独家记忆
摘要

这篇文章主要介绍“Go slice切片如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go slice切片如何使用”文章能帮助大家解决问题。定义切片区别于数组,是引用类型,

这篇文章主要介绍“Go slice切片如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go slice切片如何使用”文章能帮助大家解决问题。

定义

切片区别于数组,是引用类型, 不是值类型。数组是固定长度的,而切片长度是可变的,我的理解是:切片是对数组一个片段的引用。

var s1 []int    //定义一个存放int类型元素的切片var s2 []string //定义一个存放string类型元素的切片fmt.Println(s1, s2)fmt.Println(s1 == nil) //true  为空  没有开辟内存空间fmt.Println(s2 == nil) //true

打印结果:

Go slice切片如何使用

解析: 说明我们已经声明定义成功了,但是并没有开辟内存空间,因为s1、s2的值为nil

定义并初始化

我们可以在定义的同时初始化

var s1 = []int{1, 2, 3}var s2 = []string{"北苑", "长阳", "望京"}fmt.Println(s1, s2)fmt.Println(s1 == nil) //falsefmt.Println(s2 == nil) //false

打印结果:

Go slice切片如何使用

解析: 初始化成功,s1 s2的值都不等于nil

长度和容量

分别使用len()、cap()获得切片的长度和容量

fmt.Printf("len(s1):%d cap(s1):%d\n", len(s1), cap(s1))fmt.Printf("len(s2):%d cap(s2):%d\n", len(s2), cap(s2))

打印结果:

Go slice切片如何使用

解析: 和我们预期的一致,长度和容量都为3

由数组得到切片

开篇我已经提到数组和切片的关系,这里在进一步讲一下:

  • 切片的本质是操作数组,只是数组是固定长度的,而切片的长度可变的

  • 切片是引用类型,可以理解为引用数组的一个片段;而数组是值类型,把数组A赋值给数组B,会为数组B开辟新的内存空间,修改数组B的值并不会影响数组A。而切片作为引用类型,指向同一个内存地址,是会互相影响的。

//定义一个数组a1 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}s3 := a1[0:4] //基于一个数组切割  [0:4]左包含 右不包含  即为[1,2,3,4]fmt.Println(s3)

打印结果:

Go slice切片如何使用

注意:a1[0:4] 基于一个数组切割 [0:4]左包含 右不包含 即为[1,2,3,4]

更多切割方式举例

a1 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}s4 := a1[2:4] //[3 4]s5 := a1[:4] //[1 2 3 4]s6 := a1[2:] //[3 4 5 6 7 8 9]s7 := a1[:]  //[1 2 3 4 5 6 7 8 9]fmt.Println(s4)fmt.Println(s5)fmt.Println(s6)fmt.Println(s7)

打印结果:

Go slice切片如何使用

解析: 都符合上面提到的左包含,右不包含原则 s4从下标2开始截取,截取到下标4 s5省略了第一个参数,表示从下标0开始截取 s6省略了第二个参数,表示截取到最后一个元素 s7省略了两个参数,只填写了中间的冒号:,表示取全部元素

切片的长度和容量

切片的长度很好理解,就是元素的个数

切片的容量我们重点理解一下:在切片引用的底层数组中从切片的第一个元素到数组最后一个元素的长度(元素数量)

这么读起来可能有点抽象,我们看下面这个栗子就很好理解啦:

a1 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}s5 := a1[:4] //[1 2 3 4]s6 := a1[2:] //[3 4 5 6 7 8 9]s7 := a1[:]  //[1 2 3 4 5 6 7 8 9]fmt.Printf("len(s5):%d cap(s5):%d\n", len(s5), cap(s5)) //4 9fmt.Printf("len(s6):%d cap(s6):%d\n", len(s6), cap(s6)) //7 7fmt.Printf("len(s7):%d cap(s7):%d\n", len(s7), cap(s7)) //9 9

打印结果:

Go slice切片如何使用

解析: a1是数组长度为9,容量也为9,值是从1~9

s5/s6/s7都是切割数组a1得到的切片。

s5的长度为4,因为只有1 2 3 4这4个元素,容量为9,因为s5切片的第一个元素是1,而s5底层数组a1最后一个元素是9,1~9共9个元素,所以s5的容量为9。

s6的长度为7,因为s6的元素是39这7个元素;容量也为7,因为s5的底层数组最后一个元素是9,39共7个元素,所以s6的容量为7。

S7更好理解了,长度和容量都是9,小伙伴们自己理解一下。

切片再切片

我们可以对切片进行再切片操作

比如,我们针对上面的数据再次切片进行测试

s8 :=s6[3:]fmt.Printf("len(s8):%d cap(s8):%d\n", len(s8), cap(s8)) //4 4

打印结果:

Go slice切片如何使用

解析:我们知道可以对切片进行再次切片就可以,至于长度和容器大家搞明白上面的栗子,这个输出结果就是意料之中的了。

slice是引用类型

我们举个栗子来证明切片是引用类型

//定义数组a1 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}//有数组切割成切片s6s6 := a1[2:] //[3 4 5 6 7 8 9]//切片再次切片,赋值给s8s8 :=s6[3:] //[6 7 8 9]//修改原始数组,把下标为2的值由3改为333a1[2] = 333//打印s6,发现s6中的3也变成了333fmt.Println("s6:", s6) //[333 4 5 6 7 8 9]//因为s8基于s6切片而成,我们测试一下切片再切片的引用传的fmt.Println("s8:", s8) //[6 7 8 9]//我们把原始数组下标为5的值由6改为666a1[5] = 666//打印s8切片,得到结果6也变成了666fmt.Println("s8:", s8) //[666 7 8 9]

打印结果:

Go slice切片如何使用

解析: 由此我们可以明确的知道切片是引用类型,当底层数组改变时,不管是切片,还是切片再切片,值都会改变。因为他们使用的是一个内存块,引用的一个内存地址。

关于“Go slice切片如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Go slice切片如何使用

本文链接: https://www.lsjlt.com/news/340783.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go slice切片如何使用
    这篇文章主要介绍“Go slice切片如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go slice切片如何使用”文章能帮助大家解决问题。定义切片区别于数组,是引用类型,...
    99+
    2023-07-02
  • Go语言--切片(Slice)详解
    目录一、定义切片1、声明一个未指定大小的数组来定义切片2、使用make()函数来创建切片二、切片是可索引的1、len() 和 cap() 函数三、切片截取四、增加切片的容量说明: ...
    99+
    2022-11-12
  • Go切片slice实例分析
    本文小编为大家详细介绍“Go切片slice实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go切片slice实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。slice表示切片(分片),例如对一个数组...
    99+
    2023-06-30
  • Golang中Slice切片如何使用
    今天小编给大家分享一下Golang中Slice切片如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。上代码func&nb...
    99+
    2023-07-05
  • Go基础系列:Go切片(分片)slice详解
    slice表示切片(分片),例如对一个数组进行切片,取出数组中的一部分值。在现代编程语言中,slice(切片)几乎成为一种必备特性,它可以从一个数组(列表)中取出任意长度的子数组(列...
    99+
    2022-11-13
  • 聊聊go语言中的切片(slice)
    本篇文章带大家了解一下golang中可变长度的"数组"——切片(slice),希望对大家有所帮助!golang切片(slice)(1)切片的定义切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做...
    99+
    2022-07-04
    go语言 golang 切片
  • Go语言里切片slice的用法介绍
    1.切片是基于数组做的一层封装,灵活能够自动扩容。 2.切片的初始化方法 ①直接创建 ②基于已有的数组或切片 ③使用make来创建一个切片 第一个5是切片的大小 第二个5是切片...
    99+
    2022-11-13
  • python如何使用slice函数命名切片
    小编给大家分享一下python如何使用slice函数命名切片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用slice函数命名...
    99+
    2022-10-19
  • Go语言里切片slice怎么初始化
    这篇文章主要介绍“Go语言里切片slice怎么初始化”,在日常操作中,相信很多人在Go语言里切片slice怎么初始化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言里切片slice怎么初始化”的疑惑有所...
    99+
    2023-07-02
  • GO语言的数组array与切片slice详解
    GO语言数组(array) 在GO语言中,数组是用于存储相同数据类型的集合,数组长度必须是一个常量表达式,且是一个非负数GO语言中的数组是一种值类型,下文会介绍 GO语言数组定义的格...
    99+
    2022-12-19
    GO语言的数组array GO语言切片slice GO语言数组定义赋值 GO语言多维数组 GO语言创建切片 GO语言复制与追加切片
  • 深入了解Golang中Slice切片的使用
    目录写在前面上代码分析原因总结写在前面 周日下午在家学习,看到一个关于切片的问题,在网上找了一些资料,做个总结。 上代码 func main() { sl := make([]in...
    99+
    2023-02-27
    Golang Slice切片使用 Golang Slice切片 Golang Slice
  • Go slice切片make生成append追加copy复制示例
    目录回顾加深理解生成切片 make更好的理解长度和容量切片引用类型实战切片的遍历append多次追加追加多个元素复制切片删除元素数组转切片实战演练总结回顾 上一篇文章我们介绍了切片s...
    99+
    2022-11-13
  • 如何使用Python的slice()函数对列表进行切片
    如何使用Python的slice()函数对列表进行切片Python中的slice()函数是一个灵活且强大的工具,可以用于对列表进行切片操作。通过切片,我们可以从一个列表中截取出其中的一部分元素,并将其作为新的列表进行使用。本文将介绍如何使用...
    99+
    2023-11-18
    列表 切片 slice函数
  • Go slice切片make生成append追加copy复制的方法
    这篇文章主要介绍“Go slice切片make生成append追加copy复制的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go slice切片make生成append追加...
    99+
    2023-07-02
  • 浅谈Golang Slice切片如何扩容的实现
    目录一、Slice数据结构是什么?二、详细代码1.数据结构2.扩容原则3.如何理解扩容规则一1.当小于1024个元素时2.当大于1024个元素时4.如何理解扩容规则二1.简单理解内存...
    99+
    2022-11-13
  • go语言中的切片如何定义及使用
    这篇文章主要介绍“go语言中的切片如何定义及使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言中的切片如何定义及使用”文章能帮助大家解决问题。golang切片(slice)(1)切片的定义切...
    99+
    2023-07-02
  • Go语言容器的数组和切片如何使用
    这篇文章主要介绍“Go语言容器的数组和切片如何使用”,在日常操作中,相信很多人在Go语言容器的数组和切片如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言容器的数组和切片如何使用”的疑惑有所帮助!...
    99+
    2023-07-04
  • go语言中切片如何加元素
    这篇文章主要介绍“go语言中切片如何加元素”,在日常操作中,相信很多人在go语言中切片如何加元素问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言中切片如何加元素”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-05
  • python中如何使用切片
    这篇文章给大家介绍python中如何使用切片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python 切片用法: 先创建一个0-99的数列: >>> L = range(100)>&...
    99+
    2023-06-04
  • 如何用Go判断元素是否在切片中
    目录1.问题2.遍历查询3.map 查询4.性能对比5.转换通用化6.借助开源库 golang-set7.小结参考文献1.问题 如何判断元素是否在切片中,Golang 并没有提供直接...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作