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

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

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

数组

定义

一维数组

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

多维数组

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

使用

数组可以通过索引来访问和修改元素,索引从0开始计数。例如,对于一维数组arr,可以通过arr[index]来访问第index个元素;对于多维数组arr,可以通过arr[index1][index2]...[indexN]来访问多维数组中的元素。8wZ28资讯网——每日最新资讯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)}

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

初始化

Go语言中数组的初始化有两种方式:一种是使用数组字面量直接初始化数组,另一种是通过索引逐个赋值来初始化数组。8wZ28资讯网——每日最新资讯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)}

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

相关函数

数组的常用函数有len()和cap(),其中len()函数用于返回数组的长度,cap()函数用于返回数组的容量。数组还支持切片操作,可以使用切片语法来获取数组的子集。8wZ28资讯网——每日最新资讯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()函数获取数组的长度和容量,以及如何使用切片操作获取数组的子集。8wZ28资讯网——每日最新资讯28at.com

切片

定义

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

初始化

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

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

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

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

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

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

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

使用

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

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

以下是使用切片进行访问、修改以及动态增加元素的示例代码8wZ28资讯网——每日最新资讯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]}

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

和数组的区别

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

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

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

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

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

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

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
Top