Golang学习笔记_13——数组

ops/2024/12/19 14:51:25/

Golang学习笔记_10——Switch
Golang学习笔记_11——指针
Golang学习笔记_12——结构体


文章目录


数组

Go语言中的数组是一种具有固定长度、相同类型元素的集合。数组的长度是数组类型的一部分,这意味着数组的长度在定义后是固定的,不能改变。

在Go语言中,数组的使用非常基础且重要,特别是在理解切片(slice)和映射(map)等更复杂的数据结构时。

1. 定义

// 数组可以通过显式地指定长度和元素类型来定义
var aar1 [5] int// 定义时直接初始化数组的元素
var aar2 = [5]int{1, 2, 3, 4, 5}// 省略数组的长度,编译器会根据提供的初始化值的数量自动推断
var aar3 = [...]int{1, 2, 3, 4}

2. 访问和修改

// 修改数组的值
aar1[1] = 10// 访问数组的第三个元素
value := aar[2]

3. 多维数组

var matrix [3][4]int
matrix = [3][4]int{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},
}// 访问多维数组
value2 := matrix[1][2]  // 访问第二行第三列的元素

4. 计算数组长度

length := len(matrix)

5. 数组作为函数参数

数组作为函数参数传递。传递的是数组的副本,因此函数内部对数组的修改不会影响外部的数组

func array_demo2(aar [5]int) {arr := aarfor i := 0; i < len(arr); i++ {fmt.Println("Index:", i, "Value:", arr[i])}aar[2] = 100
}

测试方法

func Test_array_demo2(t *testing.T) {aarr := [...]int{1, 2, 3, 4, 5}array_demo2(aarr)fmt.Println(aarr)
}

输出结果

=== RUN   Test_array_demo2
Index: 0 Value: 1
Index: 1 Value: 2
Index: 2 Value: 3
Index: 3 Value: 4
Index: 4 Value: 5
[1 2 3 4 5]
--- PASS: Test_array_demo2 (9.03s)
PASS

6. 遍历

func array_demo3(aar [5]int) {arr := aarfor i := 0; i < len(arr); i++ {fmt.Println("Index:", i, "Value:", arr[i])}for index, value := range arr {fmt.Println("Index:", index, "Value:", value)}
}

测试方法

func Test_array_demo3(t *testing.T) {aar1 := [5]int{1, 2, 3, 4, 5}type args struct {aar [5]int}tests := []struct {name stringargs args}{{name: "1",args: args{aar: aar1},},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {array_demo3(tt.args.aar)})}
}

输出结果

=== RUN   Test_array_demo3
=== RUN   Test_array_demo3/1
Index: 0 Value: 1
Index: 1 Value: 2
Index: 2 Value: 3
Index: 3 Value: 4
Index: 4 Value: 5
Index: 0 Value: 1
Index: 1 Value: 2
Index: 2 Value: 3
Index: 3 Value: 4
Index: 4 Value: 5
--- PASS: Test_array_demo3 (0.00s)--- PASS: Test_array_demo3/1 (0.00s)
PASS

7. 数组的内存表示

数组在内存中是连续存储的,这意味着数组访问速度非常快。但是,数组的长度是其类型的一部分,因此不同长度的数组是不同类型,不能相互赋值。

源码

// array_demo.go 文件package array_demoimport "fmt"func array_demo1() {// 数组可以通过显式地指定长度和元素类型来定义var aar1 [5]int// 定义时直接初始化数组的元素var aar2 = [5]int{1, 2, 3, 4, 5}// 省略数组的长度,编译器会根据提供的初始化值的数量自动推断var aar3 = [...]int{1, 2, 3, 4}// 修改数组的值aar1[1] = 10// 访问数组的第三个元素value := aar2[2]fmt.Println(aar3)fmt.Printf("aar2[2] value is %d\n", value)var matrix [3][4]intmatrix = [3][4]int{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},}// 访问多维数组value2 := matrix[1][2] // 访问第二行第三列的元素fmt.Println(value2)}func array_demo2(aar [5]int) {arr := aarfor i := 0; i < len(arr); i++ {fmt.Println("Index:", i, "Value:", arr[i])}aar[2] = 100
}func array_demo3(aar [5]int) {arr := aarfor i := 0; i < len(arr); i++ {fmt.Println("Index:", i, "Value:", arr[i])}for index, value := range arr {fmt.Println("Index:", index, "Value:", value)}
}
// array_demo_test.go
package array_demoimport ("fmt""testing"
)func Test_array_demo2(t *testing.T) {aarr := [...]int{1, 2, 3, 4, 5}array_demo2(aarr)fmt.Println(aarr)
}func Test_array_demo3(t *testing.T) {aar1 := [5]int{1, 2, 3, 4, 5}type args struct {aar [5]int}tests := []struct {name stringargs args}{{name: "1",args: args{aar: aar1},},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {array_demo3(tt.args.aar)})}
}

http://www.ppmy.cn/ops/143206.html

相关文章

如何快速打出 0 - 9 这10个数字

如何快速打出 0 - 9 这10个数字 提出问题原因 大家可能都听说过金山打字通, 就是打字的软件, 上面只教26个字母的盲打&#xff0c;当我们需要按下数字键时&#xff0c;往往需要看键盘&#xff0c;这样浪费了时间和效率。盲按的话&#xff0c;手够不着数字键&#xff0c;也不能…

【电路笔记 TMS320F28335DSP】DSP项目文件说明

DSP项目文件及说明 文件夹作用说明cmd存放用于控制DSP启动或调试的命令文件。通常包含启动时的脚本文件和相关配置文件。gel存放调试所需的 GEL (General Extension Language) 脚本。GEL 脚本用于调试过程中初始化硬件和设置寄存器。gel\ccsv4专门存放与 Code Composer Studio…

Edge SCDN高效防护与智能加速解决方案

Edge SCDN解决方案&#xff0c;以其卓越的安全防护能力&#xff0c;为企业筑起了一道坚不可摧的防线。 一、DDoS攻击的精准防御 Edge SCDN能够敏锐捕捉并识别大规模的DDoS攻击流量&#xff0c;运用其先进的流量清洗策略&#xff0c;精准剔除恶意流量&#xff0c;确保合法用户…

Axios和Ajax的区别

1. 本质不同 Axios&#xff1a;是一个专门用于发送 HTTP 请求的 JavaScript 库。它基于 Promise 来处理异步操作&#xff0c;这使得代码在处理多个异步请求时更易于阅读和维护&#xff0c;并且它在浏览器和 Node.js 环境中都可以使用。Ajax&#xff1a;不是一个库&#xff0c;而…

分立器件---运算放大器关键参数

运算放大器 关键参数 1、供电电压:有单电源电压、双电源电压,双电源电压尽量两个电源都接。如图LM358B,供电电压可以是20V或者是40V和GND。 2、输入偏置电流IB:当运放输出直流电压为零时,运放两个输入端流进或者流出直流电流的平均值。同向输入端电流IB+与反向输入端电流…

【AI知识】逻辑回归介绍+ 做二分类任务的实例(代码可视化)

1. 分类的基本概念 在机器学习的有监督学习中&#xff0c;分类一种常见任务&#xff0c;它的目标是将输入数据分类到预定的类别中。具体来说&#xff1a; 分类任务的常见应用&#xff1a; 垃圾邮件分类&#xff1a;判断一封电子邮件是否是垃圾邮件 。 医学诊断&#xff1a;…

UE UMG 多级弹出菜单踩坑

多级弹出菜单 https://www.bilibili.com/video/BV1ub411J7nA 运行时添加 widget 的方法 create widget 然后 add child 到某个组件&#xff0c;比如 canvas 运行时修改 widget 位置的方法 set widget slot position 用起来没效果 怀疑是因为我没有传入 slot 但是暂时不知…

【前言】Python实践~数据库管理专栏规划

一、专栏定位与目标 1. 专栏定位 主题&#xff1a;数据库管理工具开发&#xff08;Python实践&#xff09;目标读者&#xff1a; 对数据库管理感兴趣的开发者。希望通过Python实现数据库自动化操作的初学者和中级开发者。需要开发数据库管理工具的项目团队。 2. 专栏目标 …