Golang学习笔记_13——数组

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


文章目录

    • 数组
      • [1. 定义](#1. 定义)
      • [2. 访问和修改](#2. 访问和修改)
      • [3. 多维数组](#3. 多维数组)
      • [4. 计算数组长度](#4. 计算数组长度)
      • [5. 数组作为函数参数](#5. 数组作为函数参数)
      • [6. 遍历](#6. 遍历)
      • [7. 数组的内存表示](#7. 数组的内存表示)
    • 源码

数组

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

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

1. 定义

go 复制代码
// 数组可以通过显式地指定长度和元素类型来定义
var aar1 [5] int

// 定义时直接初始化数组的元素
var aar2 = [5]int{1, 2, 3, 4, 5}

// 省略数组的长度,编译器会根据提供的初始化值的数量自动推断
var aar3 = [...]int{1, 2, 3, 4}

2. 访问和修改

go 复制代码
// 修改数组的值
aar1[1] = 10

// 访问数组的第三个元素
value := aar[2]

3. 多维数组

go 复制代码
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. 计算数组长度

go 复制代码
length := len(matrix)

5. 数组作为函数参数

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

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

测试方法

go 复制代码
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. 遍历

go 复制代码
func array_demo3(aar [5]int) {
	arr := aar
	for i := 0; i < len(arr); i++ {
		fmt.Println("Index:", i, "Value:", arr[i])
	}

	for index, value := range arr {
		fmt.Println("Index:", index, "Value:", value)
	}
}

测试方法

go 复制代码
func Test_array_demo3(t *testing.T) {
	aar1 := [5]int{1, 2, 3, 4, 5}

	type args struct {
		aar [5]int
	}
	tests := []struct {
		name string
		args 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. 数组的内存表示

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

源码

go 复制代码
// array_demo.go 文件

package array_demo

import "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]int
	matrix = [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 := aar
	for i := 0; i < len(arr); i++ {
		fmt.Println("Index:", i, "Value:", arr[i])
	}
	aar[2] = 100
}

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

	for index, value := range arr {
		fmt.Println("Index:", index, "Value:", value)
	}
}
go 复制代码
// array_demo_test.go
package array_demo

import (
	"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 string
		args args
	}{
		{
			name: "1",
			args: args{aar: aar1},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			array_demo3(tt.args.aar)
		})
	}
}
相关推荐
_落纸2 天前
三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
笔记
Alice-YUE2 天前
【CSS学习笔记3】css特性
前端·css·笔记·html
2303_Alpha2 天前
SpringBoot
笔记·学习
萘柰奈2 天前
Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
学习·unity
沐矢羽2 天前
Tomcat PUT方法任意写文件漏洞学习
学习·tomcat
好奇龙猫2 天前
日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(10):91-100语法+考え方13
学习
向阳花开_miemie2 天前
Android音频学习(十八)——混音流程
学习·音视频
工大一只猿3 天前
51单片机学习
嵌入式硬件·学习·51单片机
c0d1ng3 天前
量子计算学习(第十四周周报)
学习·量子计算
Hello_Embed3 天前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件