# Go 数组
- 数组是一个具有`相同数据类型`的元素组成的`固定长度`的`有序集合`。
- 在Go语言中,数组是值类型,长度是类型的组成部分,也就是说"`[10]int`"和“`[20]int`”是完全不同的两种数组类型。
- 同类型的两个数组支持"=="和"!="比较,但是不能比较大小。
- 数组作为参数时,函数内部不改变数组内部的值,除非是传入数组的指针。
- 数组的指针:*[3]int
- 指针数组:[2]*int
示例1:
```go
package main
import "fmt"
func main() {
// 这里我们创建了一个具有5个元素的整型数组
// 元素的数据类型和数组长度都是数组的一部分
// 默认情况下,数组元素都是零值
// 对于整数,零值就是0
var a [5]int
fmt.Println("emp:", a)
// 我们可以使用索引来设置数组元素的值,就像这样
// "array[index] = value" 或者使用索引来获取元素值,
// 就像这样"array[index]"
a[4] = 100
fmt.Println("set:", a)
fmt.Println("get:", a[4])
// 内置的len函数返回数组的长度
fmt.Println("len:", len(a))
// 这种方法可以同时定义和初始化一个数组
b := [5]int{1, 2, 3, 4, 5}
fmt.Println("dcl:", b)
// 数组都是一维的,但是你可以把数组的元素定义为一个数组
// 来获取多维数组结构
var twoD [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println("2d: ", twoD)
}
```
输出结果为
```
emp: [0 0 0 0 0]
set: [0 0 0 0 100]
get: 100
len: 5
dcl: [1 2 3 4 5]
2d: [[0 1 2] [1 2 3]]
```
`拥有固定长度`是数组的一个特点,但是这个特点有时候会带来很多不便,尤其在一个集合元素个数不固定的情况下。这个时候我们更多地使用`切片`。
示例2:
可以用new创建数组,并返回数组的指针
```go
package main
import "fmt"
func main() {
var a = new([5]int)
test(a)
fmt.Println(a, len(a))
}
func test(a *[5]int) {
a[1] = 5
}
```
输出结果:
```
&[0 5 0 0 0] 5
```
示例3:
```go
package main
import "fmt"
func main() {
a := [...]User{
{0, "User0"},
{8, "User8"},
}
b := [...]*User{
{0, "User0"},
{8, "User8"},
}
fmt.Println(a, len(a))
fmt.Println(b, len(b))
}
type User struct {
Id int
Name string
}
```
输出结果:
```
[{0 User0} {8 User8}] 2
[0x1f216130 0x1f216140] 2
```
- 版权
- 内容
- Go常量
- Go变量
- Go 数值
- Go 数组
- Go 字典
- Go 函数定义
- Go 方法
- Go 结构体
- Go 闭包函数
- Go 接口
- Go 字符串操作函数
- Go 字符串格式化
- Go 自定义排序
- Go Base64编码
- Go Defer
- Go Exit.md
- Go for循环
- Go if..else if..else 条件判断
- Go JSON支持
- Go Line Filters
- Go 状态协程
- Go Panic
- Go range函数
- Go SHA1 散列
- Go String与Byte切片之间的转换
- Go Switch语句
- Go URL解析
- Go 遍历通道
- Go 并行功能
- Go 并行通道Channel
- Go 超时
- Go 错误处理
- Go 打点器
- Go 递归函数
- Go 读取文件
- Go 工作池
- Go 关闭通道
- Go 函数多返回值
- Go 函数回调
- Go 函数命名返回值
- Go 互斥
- Go 环境变量
- Go 集合功能
- Go 计时器
- Go 进程触发
- Go 进程执行
- Go hello world
- Go 可变长参数列表
- Go 命令行参数
- Go 命令行参数标记
- Go 排序
- Go 切片
- Go 请求处理频率控制
- Go 时间
- Go 时间戳
- Go 时间格式化和解析
- Go 数字解析
- Go 随机数
- Go 通道的同步功能
- Go 通道方向
- Go 通道缓冲
- Go 通道选择Select
- Go 写入文件
- Go 信号处理
- Go 原子计数器
- Go 正则表达式
- Go 指针