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. 计算数组长度
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_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]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.gopackage 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 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)
- })
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |