[TOC]
数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是意的原始类型,比如int、string等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在Golang中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型。Golang中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。数组是 **值类型**
>[info] 值类型有两个点:
> - 有默认值。例如整型是0,浮点型是0,布尔值是false,字符串是''
> - 变量赋值的时候,可以理解为 `ctrl + c` 和 `ctrl + v` 的场景。最终两个变量的值是没有关系的。修改一个变量的值,不会导致另一个值发生改变
## 数组定义
```go
// 先定义后初始化
var array1 [3]string
array1[0] = "beijing"
array1[1] = "guangdong"
array1[2] = "shanghai"
fmt.Println(array1)
// 定义并初始化
var array2 = [3]string{"beijing", "guangdong", "shanghai"}
fmt.Println(array2)
// 自动推导数组长度
var array3 = [...]int8{1, 2, 3, 4}
fmt.Println(array3)
// 指定下标初始化
var array4 = [5]bool{1: true, 3: false}
fmt.Println(array4)
// 运行结果:
// [beijing guangdong shanghai]
// [beijing guangdong shanghai]
// [1 2 3 4]
// [false true false false false]
```
## 数组是值类型
```go
var array5 = [3]string{"beijing", "guangdong", "shanghai"}
array6 := array5
fmt.Printf("array5: %s, array6: %s\n", array5, array6)
array6[2] = "shandong"
fmt.Printf("array5: %s, array6: %s\n", array5, array6)
// 运行结果:
// array5: [beijing guangdong shanghai], array6: [beijing guangdong shanghai]
// array5: [beijing guangdong shanghai], array6: [beijing guangdong shandong]
```
>[info] 由上述例子可知:数组赋值后,两个变量是毫无关系。
## 数组遍历
```go
var array7 = [3]string{"beijing", "guangdong", "shanghai"}
// 方法一
for i := 0; i < len(array7); i++ {
fmt.Println(array7[i])
}
// 方法二【常用】
// i是键,v是值
for i, v := range array7 {
fmt.Println(i, v)
}
// 运行结果:
// beijing
// guangdong
// shanghai
// 0 beijing
// 1 guangdong
// 2 shanghai
```
## 多维数组
```go
var array8 = [3][2]int8{
{1, 2},
{3, 4},
{5, 6},
}
fmt.Println(array8)
// 变量二维数组
for _, v1 := range array8 {
for _, v1 := range v1 {
fmt.Printf("%d ", v1)
}
fmt.Println()
}
// 运行结果
// [[1 2] [3 4] [5 6]]
// 1 2
// 3 4
// 5 6
```
- Golang简介
- 开发环境
- Golang安装
- 编辑器及快捷键
- vscode插件
- 第一个程序
- 基础数据类型
- 变量及匿名变量
- 常量与iota
- 整型与浮点型
- 复数与布尔值
- 字符串
- 运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 流程控制语句
- 获取用户输入
- if分支语句
- for循环语句
- switch语句
- break_continue_goto语法
- 高阶数据类型
- pointer指针
- array数组
- slice切片
- slice切片扩展
- map映射
- 函数
- 函数定义和调用
- 函数参数
- 函数返回值
- 作用域
- 函数形参传递
- 匿名函数
- 高阶函数
- 闭包
- defer语句
- 内置函数
- fmt
- strconv
- strings
- time
- os
- io
- 文件操作
- 编码
- 字符与字节
- 字符串
- 读写文件
- 结构体
- 类型别名和自定义类型
- 结构体声明
- 结构体实例化
- 模拟构造函数
- 方法接收器
- 匿名字段
- 嵌套与继承
- 序列化
- 接口
- 接口类型
- 值接收者和指针接收者
- 类型与接口对应关系
- 空接口
- 接口值
- 类型断言
- 并发编程
- 基本概念
- goroutine
- channel
- select
- 并发安全
- 练习题
- 第三方库
- Survey
- cobra