golang学习笔记16-数组

devtools/2024/10/19 11:17:59/

注:本人已有C,C++,Python基础,只写本人认为的重点。
C/C++和go最大的区别之一是前者数据类型写在变量名前,可读性强,后者却写在后面,可读性不太好,本人到现在还是不习惯。那么数组也是一样,除了数据类型位置不同,其他基本和C/C++一样,当然,有两个重要区别,一个是声明,一个是数组的数据类型。
1.声明:直接看代码

package mainimport "fmt"func main() {// 第一种:显式指定数组长度和元素// 这里我们创建一个长度为3的整数数组 arr1,并且在初始化时直接给出元素的值。// 注意,数组长度是固定的,因此 arr1 只能存储3个整数。var arr1 [3]int = [3]int{3, 6, 9}// 输出 arr1 的值fmt.Println(arr1)// 第二种:省略数组长度的声明// 在这种情况下,我们依然创建了一个长度为3的数组 arr2,但是没有明确写出数组长度。// Go 会根据初始化的元素数量自动推断出数组的长度。var arr2 = [3]int{1, 4, 7}// 输出 arr2 的值fmt.Println(arr2)// 第三种:使用省略号(...)自动推断长度// 这里使用省略号来声明数组,Go 会根据提供的元素数量自动确定数组长度。// 在这个例子中,arr3 的长度为4,因为我们提供了4个元素。var arr3 = [...]int{4, 5, 6, 7}// 输出 arr3 的值fmt.Println(arr3)// 第四种:使用索引初始化数组// 这里我们使用索引来初始化数组的特定元素。在这个例子中,我们定义了一个长度为4的数组 arr4。// 通过指定索引(例如 0, 1, 2, 3)来为每个元素赋值。// 这种方式可以在初始化时对数组的元素进行乱序赋值。var arr4 = [...]int{0: 33, 1: 99, 3: 88}// 输出 arr4 的值fmt.Println(arr4) //未初始化的地方默认为0,还记得吗?
}

二维数组也是差不多的,只不过方括号多了一个,花括号嵌套了,其余和C/C++一样。
2.数据类型:C/C++中,数组是引用类型,数组传入一个函数,在该函数中被更改,原数组也会改变,而go中的数组是值类型,只会传入副本,不会改变原值。解决方法很简单,用指针即可。示例如下:

package mainimport "fmt"// 函数接收数组的副本(值传递)
func modifyArray(arr [3]int) {arr[0] = 100 // 修改副本,不会影响原数组fmt.Println("Inside modifyArray (after modification):", arr)
}// 函数接收数组的指针(引用传递)
func modifyArrayWithPointer(arr *[3]int) {arr[0] = 200 // 修改原数组,或者写成(*arr)[0]fmt.Println("Inside modifyArrayWithPointer (after modification):", *arr)
}func main() {// 初始化数组originalArray := [3]int{1, 2, 3}// 通过值传递的方式fmt.Println("Before modifyArray:", originalArray)modifyArray(originalArray)                       // 传递的是副本fmt.Println("After modifyArray:", originalArray) // 原数组未改变// 通过指针传递的方式fmt.Println("\nBefore modifyArrayWithPointer:", originalArray)modifyArrayWithPointer(&originalArray)                      // 传递数组的指针fmt.Println("After modifyArrayWithPointer:", originalArray) // 原数组已改变
}

http://www.ppmy.cn/devtools/119925.html

相关文章

复现 BEVfusion bug集合(4090d)

目录 写在前面的话Bug 汇总1. python版本2. cuda版本3. mmdet3d版本4. mmcv版本5. mmdet版本 后期工作(看到numpy说明成功一半)6. numpy版本7. timm安装8. yapf 版本 写在前面的话 主要的问题还是mmcv库的问题,这个版本维护太差了&#xff0…

安全服务面试

128.三层交换机? 三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快 大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由, 多次转发。对于数据包转发等规律性的过程由硬件…

「iOS」——KVC

iOS学习 前言KVC模式KVC设值KVC取值KVC使用keyPathKVC处理异常处理不存在的key处理nil异常 KVC处理字典KVC高阶消息传递 总结 前言 对KVC模式的简单学习和总结。 KVC模式 KVC(Key-Value Coding,键值编码)是一种通过字符串来访问对象属性的机…

【机器学习(十)】时间序列案例之月销量预测分析—Holt-Winters算法—Sentosa_DSML社区版

文章目录 一、Holt-Winters算法原理(一) 加法模型(二) 乘法模型(三) 阻尼趋势 二、Holt Winters算法优缺点优点缺点 三、Python代码和Sentosa_DSML社区版算法实现对比(一) 数据读入和统计分析(二) 数据预处理(三) 模型训练和模型评估(四) 模型可视化 四、总结 一、Holt-Winters…

Redis实战-优惠券秒杀

Redis实战篇-短信登入 该笔记是来源于黑马程序员的Redis项目课程,为了后续方便复习。将笔记记录在博客之中 实战篇我们要学习一些什么样的内容 1.本期任务 短信登入 使用redis共享session来实现 商户查询缓存 理解缓存击穿,缓存穿透,缓存雪崩等问题 …

爬虫入门 Selenium使用

爬虫入门 & Selenium使用 特别声明📢:本教程只用于教学,大家在使用爬虫过程中需要遵守相关法律法规,否则后果自负!!! 项目代码:https://github.com/ziyifast/ziyifast-code_inst…

Redis篇(应用案例 - UV统计)(持续更新迭代)

目录 一、HyperLogLog 二、测试百万数据的统计 一、HyperLogLog 首先我们搞懂两个概念: UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。 1天内同一个用户多次访问该网站,只记录…

钉钉如何请求webhook发送信息

代码:js const myHeaders new Headers(); myHeaders.append("Content-Type", "application/json");const raw JSON.stringify({"at": {"atMobiles": ["180xxxxxx"],"atUserIds": ["user123&qu…