[TOC]
# 数组声明和初始化
## 数组声明
~~~
var 数组变量名 [元素数量]T
~~~
数组的长度 `必须` 是 `常量`,并且`长度`是数组类型的一部分。一旦定义,长度不能变。
eg:
~~~
var name [5]string
~~~
注:`[5]int`和`[10]int`是不同的类型。
~~~
var a [3]int
var b [4]int
a = b //不可以这样做,因为此时a和b是不同的类型
~~~
数组可以通过下标进行访问,下标是从`0`开始,最后一个元素下标是:`len-1`,访问越界(下标在合法范围之外),则触发访问越界,会panic。
## 初始化
### 方法一 (初始化数组时可以使用初始化列表来设置数组元素的值)
~~~
var numArray = [3]int{1, 2}
~~~
### 方法二 (如果数组长度不确定,可以使用`...`代替数组的长度,编译器会根据元素个数自行推断数组的长度)
~~~
num := [...]int{1,2,3,4,5}
~~~
### 方法三 (使用指定索引值的方式来初始化数组)
~~~
a := [...]int{1: 1, 3: 5}
fmt.Println(a) // [0 1 0 5]
~~~
## 访问数组元素
数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。
## 多维数组
### 二维数组的定义
~~~
func main() {
a := [3][2]string{
{"大雄", "静香"},
{"小叮当", "胖虎"},
{"小夫", "群演"},
}
fmt.Println(a) //[[大雄 静香] [小叮当 胖虎]]
fmt.Println(a[1][0]) //支持索引取值:小叮当
}
~~~
**注意:**多维数组**只有第一层**可以使用`...`来让编译器推导数组长度
~~~
//支持的写法
a := [...][2]string{
{"大雄", "静香"},
{"小叮当", "胖虎"},
{"小夫", "群演"},
}
//不支持多维数组的内层使用...
b := [3][...]string{
{"大雄", "静香"},
{"小叮当", "胖虎"},
{"小夫", "群演"},
}
~~~
- Go准备工作
- 依赖管理
- Go基础
- 1、变量和常量
- 2、基本数据类型
- 3、运算符
- 4、流程控制
- 5、数组
- 数组声明和初始化
- 遍历
- 数组是值类型
- 6、切片
- 定义
- slice其他内容
- 7、map
- 8、函数
- 函数基础
- 函数进阶
- 9、指针
- 10、结构体
- 类型别名和自定义类型
- 结构体
- 11、接口
- 12、反射
- 13、并发
- 14、网络编程
- 15、单元测试
- Go常用库/包
- Context
- time
- strings/strconv
- file
- http
- Go常用第三方包
- Go优化
- Go问题排查
- Go框架
- 基础知识点的思考
- 面试题
- 八股文
- 操作系统
- 整理一份资料
- interface
- array
- slice
- map
- MUTEX
- RWMUTEX
- Channel
- waitGroup
- context
- reflect
- gc
- GMP和CSP
- Select
- Docker
- 基本命令
- dockerfile
- docker-compose
- rpc和grpc
- consul和etcd
- ETCD
- consul
- gin
- 一些小点
- 树
- K8s
- ES
- pprof
- mycat
- nginx
- 整理后的面试题
- 基础
- Map
- Chan
- GC
- GMP
- 并发
- 内存
- 算法
- docker