当前位置: 首页 > article >正文

Golang学习笔记_13——数组

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


文章目录

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


数组

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 := aar
	for 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 := 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)
	}
}

测试方法

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. 数组的内存表示

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

源码

// 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)
	}
}

// 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)
		})
	}
}


http://www.kler.cn/a/442315.html

相关文章:

  • 图数据库 | 18、高可用分布式设计(中)
  • 数仓建模:如何设计可扩展性较好的同环比计算模型?
  • nginx 的基础语法学习,零基础学习
  • React封装倒计时按钮
  • Jenkinsfile共享库介绍
  • Linux浅谈——管道、网络配置和客户端软件的使用
  • MR30分布式IO模块:驱动物流传输机高效升级
  • 鸿蒙Next条件渲染用法总结
  • GPT 时代,精进编程思维 + 熟练 Prompt 是否是新的编程范式?
  • HTMLCSS:3D动态卡车
  • ChatGPT生成测试用例的最佳实践(三)
  • 设计模式——单例模式(饿汉式,懒汉式等)
  • 用户输入 %%%% , MYSQL中数据全被查询出来的Bug(GORM)
  • Java程序员如何高效学习Spring Cloud Alibaba?
  • 【ETCD】ETCD 架构揭秘:内部各组件概览
  • 基于 SSM 和 Vue 架构的新锐台球厅管理系统:创新设计引领高效实现
  • RabbitMQ中的Publish-Subscribe模式
  • 单片机:实现教学上下课的自动打玲(附带源码)
  • 【数理统计】极限定理及抽样分布
  • python之求平面离散点集围成的面积
  • Qt 开发笔记2
  • 深度学习之循环神经网络及进化(RNN-LSTM-GRU)
  • 安防监控Liveweb视频汇聚融合平台助力执法记录仪高效使用
  • 快消品 B2B 困境与破局:基于 2+1 链动模式与 S2B2C 商城小程序的思考
  • Starting MySQL.... ERROR! The server quit without updating PID file解决方案
  • 低延迟!实时处理!中软高科AI边缘服务器,解决边缘计算多样化需求!