文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

go语言中的切片如何定义及使用

2023-07-02 15:22

关注

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

go语言中的切片如何定义及使用

golang切片(slice)

(1)切片的定义

切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。

切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。

创建切片跟创建数组唯一的区别在于 Type 前的“ [] ”中是否有数字,为空,则代表切片,否则则代表数组。因为切片是长度可变的

var a []string  //声明一个字符串切片var b = []int{1,2,3} //声明一个整数类型切片并初始化var c = []bool{false,true} //声明一个bool类型并且初始化

其实在实际情况下,很多时候都是理解成:切片是数组的一部分

num:=[3]int{0,1,2}//:前后表示数组内部的索引sc1:=num[:] //获取数组的全部sc2:=num[0:2] //左闭右开,取到的是[0,1]sc3:=num[1:] //取到的是[2]sc4:=num[:1]  //取到的是[0]

(2)使用make函数创造切片

这里就开始对应上前面的说法,切片的容量的可变的,用make函数就可以实现,切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。

// make([]T, size, cap)sc=make([]int,2,10)fmt.Println(sc) // [0 0]fmt.Println(len(sc)) // len表示切片存储元素的长度fmt.Println(cap(sc)) // cap表示最大可以存储的容量

(3)切片的遍历

sc:=[]int{1,2,3}//普通for循环遍历for i:=0;i<len(sc);i++{fmt.Println(s[i])}//for range遍历for index,value:=range s{fmt.Println(index,value)}

(4)append()方法

Go语言的内建函数append()可以为切片动态添加元素。 可以一次添加一个元素,可以添加多个元素,也可以添加另一个切片中的元素(后面加…)。

var s1 []int  //定义切片s1s1 = append(s1,1)  //在切片s1后面添加一个1的元素s1 = append(s1,2,3,4) //在切片s1后面继续添加2,3,4s2:=[]int{5,6,7}  //定义切片s2s1 = append(s1,s2) //把切片s2中的元素追加到切片s1中

(5)copy方法

Go语言内建的copy()函数可以迅速地将一个切片的数据复制到另外一个切片空间中,copy()函数的使用格式如下:

a:=[]int{1,2,3,4,5}b:=make([]int,5,5)copy(b,a) //把a切片中的元素copy到b切片中的元素fmt.Println(b) //[1,2,3,4,5]b[0]=1000fmt.Println(b) // [1000,2,3,4,5]

这里有个问题需要注意的是,在实际开发中存在这样的问题

a := []int{1, 2, 3, 4, 5}b := afmt.Println(a) //[1 2 3 4 5]fmt.Println(b) //[1 2 3 4 5]b[0] = 1000fmt.Println(a) //[1000 2 3 4 5]fmt.Println(b) //[1000 2 3 4 5]

(6)巧妙删除切片中的元素

Go语言中并没有删除切片元素的专用方法,我们可以使用切片本身的特性来删除元素。 代码如下:

// 从切片中删除元素a := []int{30, 31, 32, 33, 34, 35, 36, 37}// 要删除索引为2的元素a = append(a[:2], a[3:]...)fmt.Println(a) //[30 31 33 34 35 36 37]

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯