2022-4-26 实习Day24

1、测试文档bugFix4-25对照检验,进行问题复核、过滤–3小时 80%
2、客户账户和账号无法关联问题解决。–1.5小时 100%
3、进行账务校验时,币种-机构号-交易种类不匹配。–2小时 100%

Golang编程学习(part 19)

1、数组介绍

数组可以存放多个同一类型数据。数组也是一种数据类型,在Go中,数组是值类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 定义一个数组【简直反人类】
// var 数组名 [数组大小]数据类型
var hens [7]float64

使用数组来解决问题,程序的可维护性增加
而且方法代码更加清晰,也容易扩展

// 当我们定义完数组后,其实数组的各个元素默认值为 0【零值】
var arr [10]float64
for i, f := range arr {
fmt.Println(i, f)
}
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0

2、数组的内存布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var intArr [3]int
intArr[0] = 10
intArr[1] = 20
intArr[2] = 30
fmt.Println(intArr)
fmt.Printf("intArr地址:%p,intArr[0]地址:%p,intArr[1]地址:%p,intArr[2]地址:%p",
&intArr, &intArr[0], &intArr[1], &intArr[2])

[10 20 30]
intArr地址:0xc00000c150,intArr[0]地址:0xc00000c150,intArr[1]地址:0xc00000c158,intArr[2]地址:0xc00000c160

下标 0 1 2
内存图: [ 10 | 20 | 30 ]
地址 0xc00000c150 0xc00000c158 0xc00000c160

对上图的总结
1、数组的地址可以通过数组名来获取 &intArr
2、数组的第一个元素的地址,就是数组的首地址
3、数组的各个元素的地址间隔是依据数组的类型决定的,比如 int64->8 int32->4

3、五种初始化数组的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 第一种: 类型不省略
var arr1 [3]int = [3]int{1,2,3}

// *第二种: 类型省略
var arr2 = [3]int{1,2,3}

// 第三种: 数量省略
var arr3 = [...]int{1,2,3}

// 第四种: 顺序自定义
var arr4 = [...]int{1:1, 0:2, 2:3} // [2 1 3]

// 第五种: 类型推导
arr5 := [...]string{1:"tom", 0:"jack", 2:"mary"}

4、数组的遍历

① 常规按照下标遍历
② for-range 结构遍历
1
2
3
4
5
6
7
8
9
for index, value := range arr {

}

1) 第一个返回值index是数组的下标
2) 第二个value是在该下标位置的值
3) 他们都是仅在for循环内部可见的局部变量
4) 遍历数组元素的时候, 如果不想使用下标index, 可以直接把下标index标为下划线 _
5) index 和 value 的名称不是固定的, 即程序员可以自行指定, 一般命名为 index 和 value

5、数组使用的注意事项

① 数组是多个相同类型数据的组合,一个数组一旦声明/定义,其长度是固定的,不能动态变化
② var arr []int,像这种 arr 不是数组,是一个slice切片(可扩容),后面会专门讲解
③ 数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用
④ 数组创建后,如果没有赋值,有默认值(零值)

​ 数值类型数组:默认值 0

​ 字符串数组: 默认值 “”

​ bool数组: 默认值 false

⑤ 使用数组的步骤 1)声明数组并开辟空间 2)给数组给个元素赋值【默认零值】 3)使用数组
⑥ Go的数组属 值类型 ,在默认情况下是值传递,因此会进行值拷贝。数组之间不会相互影响
⑦ 如果想在其他函数中去修改原来的数组,可以使用引用传递(指针方式)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
import "fmt"
func main() {
arr := [3]int{11, 22, 33}
test(arr)
fmt.Println(arr) // [11 22 33]

test1(&arr)
fmt.Println(arr) // [88 22 33]
}

func test(array [3]int) {
array[0] = 88
}

func test1(array *[3]int) {
(*array)[0] = 88
}

⑧ 长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度。【不能长度不同瞎传递】