摘要
主要通过介绍并实战go语言中的数组,数组定义、遍历、长度获取、各种数组类型。让你彻底掌握go数组类型。
Go语言数组介绍
- 数组是由固定长度的特定类型的元素组成的序列
- 元素个数可以为零个或者多个
- 数组下标从0开始
- 不同长度或不同类型的数组属于不同类型,无法相互赋值
- Go语言数组是一种值类型,元素是可修改的,数组本身的赋值和当做函数参数传递都是深拷贝,也就是值传递。
数组的定义方式
- 直接定义:最基本的定义,明确长度,值全是0
- 指定值定义:指定元素内容,长度为指定元素个数
- 指定索引定义:指定索引位置元素的值,其余未指定元素为0值,长度根据最大索引值确定
- 混合指定值和指定索引定义:混合值和索引定义方式
代码示例
package main
import "fmt"
func main(){
var a[2] int // 1.直接定义: 定义长度为2, 存储类型为int的数组, 元素全是0
fmt.Println(a)
var b = [...]int{1,2} // 2.指定值定义
fmt.Println(b)
var c = [...]int{2: 3} // 3. 指定索引定义 未指定按照0值
fmt.Println(c)
var d = [...]int{1,2, 5:5, 5} // 4.混合指定值和指定索引定义,未指定按照0值
fmt.Println(d)
}
代码输出
[0 0]
[1 2]
[0 0 3]
[1 2 0 0 0 5 5]
数组的遍历方式
- 方式1: range获取索引,通过下标取值
- 方式2:方式2 range 获取索引和元素内容
- 方式3:长度+下标
package main
import "fmt"
func main(){
var a = [...]int{9,8,7}
// 方式1 range获取索引,通过下标取值
for i:= range a {
fmt.Printf("%d-%v ", i, a[i])
}
fmt.Println("")
// 方式2 range 获取索引和元素内容
for i, v:= range a {
fmt.Printf("%d-%v ", i, v)
}
fmt.Println("")
//方式3 长度+下标
for i := 0; i < len(a); i++ {
fmt.Printf("%d-%v ", i, a[i])
}
}
代码输出
0-9 1-8 2-7
0-9 1-8 2-7
0-9 1-8 2-7
数组长度获取
很简单,直接通过len(arr)获取即可,cap(arr)可以获取长度, 不过对数组来说这两者一样
代码示例
package main
import "fmt"
func main(){
var a = [...]int{1,2,3}
fmt.Println(len(a))
fmt.Println(cap(a))
}
代码输出
3
3
数组类型
数组种类比较多,只要符合类型定义都可以定义数组。
可以通过 %T 输出数组类型
%v 输出数组详细信息
- 数值数组
- 空数组(长度为零,不占用空间)
- 字符串数组
- 结构体数组
- 函数数组
- 接口数组
- 通道数组
- …
代码示例
package main
import "fmt"
type Student struct{
Name string
}
func Eat(){
}
func main(){
// 数值数组
var a = []int{1,2,3}
// 空数组
var empty = [0]int{}
// 字符串数组
var s = [...]string{"hello", "world"}
// 结构体数组
var as = [...]Student{Student{Name:"jack"}}
// 函数数组
var af = [...]func(){Eat}
// 接口数组
var ai = [...]interface{}{"hi", 123}
// 通道数组
var ac = [...]chan int{}
// 输出
fmt.Printf("%T - %v\n", a, a)
fmt.Printf("%T - %v\n", empty, empty)
fmt.Printf("%T - %v\n", s, s)
fmt.Printf("%T - %v\n", as, as)
fmt.Printf("%T - %v\n", af, af)
fmt.Printf("%T - %v\n", ai, ai)
fmt.Printf("%T - %v\n", ac, ac)
}
代码输出
[]int - [1 2 3]
[0]int - []
[2]string - [hello world]
[1]main.Student - [{jack}]
[1]func() - [0x109add0]
[2]interface {} - [hi 123]
[0]chan int - []
这里是数组实战记录,欢迎评论、私信、关注交流,更多实战内容在路上~