数组
Go 语言数组声明有两种方式
- 定长数组
- 不定长度数组
go数组几个注意事项:
- 默认值:如果没有赋值,会有默认值
- int 数组,默认初始化为
0
- string 就是空串
- 数据类型必须相同,不能混用,int数组不能包含float 等,已验证
- boolean 是false
- 数组越界是 panic 异常
- 数组是值类型,默认情况下是值拷贝,也就是说每次拷贝后是一个独立副本,数组间互不影响。
- 可以使用指针来实现引用传递
使用
格式:
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.0
和 3:7.0
。
1 2 3 4 5 6
| func ArrayTest2() { balance := [5]float32{1:2.0,3:7.0} 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 var i,j int
for i = 0; i < 10; i++ { n[i] = 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] ) }
balance3 := [5]float32{1:2.0,3:7.0} for k = 0; k < 5; k++ { fmt.Printf("balance3[%d] = %f\n", k, balance3[k] ) } }
|