数组

Go 语言数组声明有两种方式

  1. 定长数组
  2. 不定长度数组

go数组几个注意事项:

  1. 默认值:如果没有赋值,会有默认值
    • int 数组,默认初始化为 0
    • string 就是空串
  2. 数据类型必须相同,不能混用,int数组不能包含float 等,已验证
  3. boolean 是false
  4. 数组越界是 panic 异常
  5. 数组是值类型,默认情况下是值拷贝,也就是说每次拷贝后是一个独立副本,数组间互不影响。
  6. 可以使用指针来实现引用传递

使用

格式:

var 数组名 [数组大小]数据类型

1.定长数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package P01var

import "fmt"

func ArrayTest3() {
var hens [6]int
hens[0] = 111
hens[1] = 222
hens[2] = 333
for i := 0; i < len(hens); i++ {
fmt.Printf("打印数组i=%d, 数据=%d\n", i, hens[i])
}

}

结果

1
2
3
4
5
6
打印数组i=0, 数据=111
打印数组i=1, 数据=222
打印数组i=2, 数据=333
打印数组i=3, 数据=0
打印数组i=4, 数据=0
打印数组i=5, 数据=0

如果输入超过实初始化的长度会越界,
越界
hens[9] = 999

1
../ArrayTest.go:11:6: invalid array index 9 (out of bounds for 6-element array)

初始化二,类似java的语法

1
2
3
4
5
6
7
8
9
func ArrayTest() {

var balance [10] float32

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

//一般用这种方式
balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
}

2.不定数组长度

如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:

1
2
3
4
5
func ArrayTest() {
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
//或
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
}

3.通过下标初始化

如果设置了数组的长度,我们还可以通过指定下标来初始化元素,
语法格式:

array_type{index: value

通过一个例子来验证一下。
直接通过一个数组进行初始化两个元素。
分别初始化数组索引 1 和 3 两个元素: 1:2.03:7.0

1
2
3
4
5
6
//  将索引为 1 和 3 的元素初始化
func ArrayTest2() {
balance := [5]float32{1:2.0,3:7.0}
// 实始化元素4
balance[4] = 50.0
}

如果 [5]int 后,[...]int 后的个数要对上,否则报错,已测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func test1()  {
var arr [5]int = [...]int{1, 2, 3, 4, 5}
} ```

### 4.遍历数组

```go
package main

import "fmt"

func main() {
var n [10]int /* n 是一个长度为 10 的数组 */
var i,j int

/* 为数组 n 初始化元素 */
for i = 0; i < 10; i++ {
n[i] = i + 100 /* 设置元素为 i + 100 */
}

/* 输出每个数组元素的值 */
for j = 0; j < 10; j++ {
fmt.Printf("Element[%d] = %d\n", j, n[j] )
}
}

结果

1
2
3
4
5
6
7
8
9
10
Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

5.声明数组的同时快速初始化数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func ArrayTest2() {
var i,j,k int
// 声明数组的同时快速初始化数组
balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

/* 输出数组元素 */
for i = 0; i < 5; i++ {
fmt.Printf("balance[%d] = %f\n", i, balance[i] )
}

balance2 := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
/* 输出每个数组元素的值 */
for j = 0; j < 5; j++ {
fmt.Printf("balance2[%d] = %f\n", j, balance2[j] )
}

// 将索引为 1 和 3 的元素初始化
balance3 := [5]float32{1:2.0,3:7.0}
for k = 0; k < 5; k++ {
fmt.Printf("balance3[%d] = %f\n", k, balance3[k] )
}
}