1.定义
要点
数组是具有固定长度且拥有零个或多个相同数据类型元素的序列。
默认情况下, 数组的每个元素都被初始化为元素类型对应的零值。
数组定义后长度不能变化。
数组的长度是数组类型的一部分。
数组是值类型, 赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。
var 数组变量名 [元素数量]Tvar a[3] int // 长度为3,元素类型为整型的数组var b[4] int // 长度为4,元素类型为整型的数组// a = b 这个是不可以的,a和b是不同的数据类型
2.初始化
一个新数组中的元素初始值为元素类型的零值。
方法一
使用数组字面量根据根据一组值来初始化一个数组。
func main() {var testArray [3]int //数组会初始化为int类型的零值var numArray = [3]int{1, 2} //使用指定的初始值完成初始化var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化fmt.Println(testArray) //[0 0 0]fmt.Println(numArray) //[1 2 0]fmt.Println(cityArray) //[北京 上海 深圳]}
方法二
使用 “…” 代替数组声明时的元素数量, 数组的长度由初始化数组的元素个数定义。
func main() {var testArray [3]intvar numArray = [...]int{1, 2}var cityArray = [...]string{"北京", "上海", "深圳"}fmt.Println(testArray) //[0 0 0]fmt.Println(numArray) //[1 2]fmt.Printf("type of numArray:%T\n", numArray) //type of numArray:[2]intfmt.Println(cityArray) //[北京 上海 深圳]fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string}
方法三
使用指定索引值的方式来初始化数组
func main() {a := [...]int{1: 1, 3: 5}fmt.Println(a) // [0 1 0 5]fmt.Printf("type of a:%T\n", a) //type of a:[4]int}
多维数组
多维数组只有第一层可以使用
func main() {a := [3][2]string{{"a", "b"},{"c", "d"},{"e", "f"},}// 多维数组只有第一层可以使用b := [...][2]string{{"a", "b"},{"c", "d"},{"e", "f"},}/*不支持多维数组的内层使用c := [3][...]string{{"a", "b"},{"c", "d"},{"e", "f"},}*/for _, v1 := range a {for _, v2 := range v1 {fmt.Printf("%v\t", v2)}fmt.Println()}}
3.赋值
Golang 中数组是值类型, 数组可以用于赋值操作。变量名代表整个数组, 同类型的数组可以赋值给另一个数组。
func main() {var a = [3]int{1, 2, 3}fmt.Printf("a||%#v||%p||\n", a, &a) // a||[3]int{1, 2, 3}||0xc000016120var b [3]intb = afmt.Printf("b||%#v||%p||\n", b, &b) // b||[3]int{1, 2, 3}||0xc000016180fmt.Printf("a = b||%t", a==b) // a = b||true}
4.遍历
func main() {var a = [3]string{"a", "b", "c"}fmt.Println("方法一:")for i:=0; i<len(a); i++ {fmt.Printf("index=%d||value=%v\n", i, a[i])}fmt.Println("方法二:")for i, v := range a {fmt.Printf("index=%d||value=%v\n", i, v)}}
