当前位置:首页 > 科技  > 软件

我们一起聊聊Go语言中的数组和切片

来源: 责编: 时间:2024-05-17 08:59:30 239观看
导读数组定义一维数组一维数组是具有相同数据类型的固定大小的数据序列。在Go语言中,一维数组的定义形式为var arrayName [size]dataType,其中arrayName是数组的名称,size是数组的大小,dataType是数组中元素的数据类型。多维

数组

定义

一维数组

一维数组是具有相同数据类型的固定大小的数据序列。在Go语言中,一维数组的定义形式为var arrayName [size]dataType,其中arrayName是数组的名称,size是数组的大小,dataType是数组中元素的数据类型。3UO28资讯网——每日最新资讯28at.com

多维数组

多维数组是数组的数组,也就是说数组中的元素又是数组。多维数组的定义形式为var arrayName [size1][size2]...[sizeN]dataType,其中size1、size2等是各个维度的大小,dataType是数组中元素的数据类型。3UO28资讯网——每日最新资讯28at.com

使用

数组可以通过索引来访问和修改元素,索引从0开始计数。例如,对于一维数组arr,可以通过arr[index]来访问第index个元素;对于多维数组arr,可以通过arr[index1][index2]...[indexN]来访问多维数组中的元素。3UO28资讯网——每日最新资讯28at.com

package mainimport "fmt"func main() {	// 一维数组的访问和修改	arr := [5]int{1, 2, 3, 4, 5}	fmt.Println("一维数组:", arr)	fmt.Println("第二个元素:", arr[1]) // 输出:2	// 修改第三个元素为10	arr[2] = 10	fmt.Println("修改后的数组:", arr)	// 多维数组的访问和修改	matrix := [2][3]int{		{1, 2, 3},		{4, 5, 6},	}	fmt.Println("多维数组:", matrix)	fmt.Println("第二行第三个元素:", matrix[1][2]) // 输出:6	// 修改第一个元素为100	matrix[0][0] = 100	fmt.Println("修改后的多维数组:", matrix)}

上面的代码演示了如何访问和修改一维数组和多维数组中的元素。3UO28资讯网——每日最新资讯28at.com

初始化

Go语言中数组的初始化有两种方式:一种是使用数组字面量直接初始化数组,另一种是通过索引逐个赋值来初始化数组。3UO28资讯网——每日最新资讯28at.com

package mainimport "fmt"func main() {	// 使用数组字面量直接初始化数组	arr1 := [3]int{1, 2, 3}	fmt.Println("数组字面量初始化:", arr1)	// 使用索引逐个赋值来初始化数组	var arr2 [3]int	arr2[0] = 1	arr2[1] = 2	arr2[2] = 3	fmt.Println("索引逐个赋值初始化:", arr2)}

上面的代码演示了使用数组字面量和索引逐个赋值两种方式来初始化数组。3UO28资讯网——每日最新资讯28at.com

相关函数

数组的常用函数有len()和cap(),其中len()函数用于返回数组的长度,cap()函数用于返回数组的容量。数组还支持切片操作,可以使用切片语法来获取数组的子集。3UO28资讯网——每日最新资讯28at.com

package mainimport "fmt"func main() {	// 定义数组	arr := [5]int{1, 2, 3, 4, 5}	// 使用 len() 函数获取数组长度	fmt.Println("数组长度:", len(arr)) // 输出:5	// 使用 cap() 函数获取数组容量	fmt.Println("数组容量:", cap(arr)) // 输出:5	// 使用切片操作获取数组的子集	subArr := arr[1:3] // 获取从索引1到索引2(不包含索引3)的子集	fmt.Println("数组的子集:", subArr) // 输出:[2 3]}

上面的代码演示了如何使用len()和cap()函数获取数组的长度和容量,以及如何使用切片操作获取数组的子集。3UO28资讯网——每日最新资讯28at.com

切片

定义

切片是一个拥有相同类型元素的可变长度的序列。在Go语言中,切片的定义形式为var sliceName []dataType,其中sliceName是切片的名称,dataType是切片中元素的数据类型。3UO28资讯网——每日最新资讯28at.com

初始化

切片可以通过切片字面量或使用内置的make()函数来初始化。3UO28资讯网——每日最新资讯28at.com

使用切片字面量初始化切片

package mainimport "fmt"func main() {	// 使用切片字面量初始化切片	slice1 := []int{1, 2, 3, 4, 5}	fmt.Println("切片字面量初始化", slice1)}

上面的代码演示了使用切片字面量来初始化切片。切片字面量可以直接指定切片的内容。3UO28资讯网——每日最新资讯28at.com

使用 make() 函数初始化切片

package mainimport "fmt"func main() {	// 使用 make() 函数初始化切片	slice2 := make([]int, 3, 5) // 创建一个长度为3,容量为5的切片	fmt.Println("使用 make() 函数初始化", slice2)}

上面的代码演示了使用make()函数来初始化切片。使用make()函数时,需要指定切片的长度和容量。3UO28资讯网——每日最新资讯28at.com

使用

切片可以像数组一样通过索引来访问和修改元素,索引从0开始计数。例如,对于切片slice,可以通过slice[index]来访问第index个元素,并且可以通过该语法来修改切片中的元素值。3UO28资讯网——每日最新资讯28at.com

除了与数组相似的索引操作外,切片还支持动态增加或删除元素的操作。使用内置的append()函数可以向切片中添加新的元素,而使用切片的切片操作可以从切片中删除元素。这种灵活的操作使得切片在处理动态数据集合时非常方便。3UO28资讯网——每日最新资讯28at.com

以下是使用切片进行访问、修改以及动态增加元素的示例代码3UO28资讯网——每日最新资讯28at.com

package mainimport "fmt"func main() {	// 定义切片	slice := []int{1, 2, 3, 4, 5}	// 访问切片元素	fmt.Println("第三个元素:", slice[2]) // 输出:3	// 修改切片元素	slice[2] = 10	fmt.Println("修改后的切片:", slice) // 输出:[1 2 10 4 5]	// 动态增加元素	slice = append(slice, 6)	fmt.Println("增加元素后的切片:", slice) // 输出:[1 2 10 4 5 6]}

上面的代码展示了使用切片进行访问、修改以及动态增加元素的操作。3UO28资讯网——每日最新资讯28at.com

和数组的区别

  • 大小:数组的大小是固定的,而切片的大小是动态可变的。
  • 初始化:数组需要提前声明大小并分配内存空间,而切片可以动态增长或缩小。
  • 传递方式:数组作为函数参数时会进行值拷贝,而切片作为函数参数时是引用传递,不会进行值拷贝。
  • 底层实现:数组是值类型,切片是引用类型,底层数据结构不同。

这些是数组和切片在定义、初始化、使用和特性上的主要区别。3UO28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-88734-0.html我们一起聊聊Go语言中的数组和切片

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: PostgreSQL 的事务 ID 回卷,应对措施也很简单

下一篇: C# 特性(Attribute)详解及示例,你学会了吗?

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    7月20日消息,据外媒报道,研究机构的报告显示,在全球智能手机出货量同比仍在下滑的大背景下,印度这一有潜力的市场也未能幸免,出货量同比也有下滑,多家厂
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top