数组
- 介绍:
数组是同一类型元素的集合。 Go 语言中不允许混合不同类型的数据;
数组的个数也是数组类型的一部分,换句话来说,数组中的元素的数量是固定的,等同于python中的元组 注意: 如果是 interface{} 类型数组,可以包含任意类型
- 声明数组:
- 数组的表现形式: [n]T ;
- n: 表示数组中元素的数量;
- T:表示每个元素的类型;
- 声明数组后,若不初始化,则会将所有的元素全部赋值为该类型的零值;
- 示例:
package main import ( "fmt" ) func main() { var a [3]int //int array with length 3 fmt.Println(a) } // 打印内容:[0 0 0]
- 数组赋值:
- 根据索引赋值:
- 示例:
package main import ( "fmt" ) func main() { var a [3]int //int array with length 3 a[0] = 12 // array index starts at 0 a[1] = 78 a[2] = 50 fmt.Println(a) }
// 打印内容: [12 78 50]
- 简略声明,且初始化赋值:
- 在简略声明中,不需要将全部的元素都进行赋值,Go 会自动将多余的元素赋值为零值;
- 示例:
package main import ( "fmt" ) func main() { a := [3]int{12, 78, 50} // short hand declaration to create array fmt.Println(a) } // 打印内容:[12 78 50]
- 忽略数组长度,声明数组:
- 语法: [...]T{a,b,c}
- Go 的编译器会自动计算数组的长度;
- 示例:
package main import ( "fmt" ) func main() { a := [...]int{12, 78, 50} // ... makes the compiler determine the length fmt.Println(a) } // 打印内容:[12 78 50]
- 数组的类型问题:
- 数组是值类型;
- 当数组赋值给一个新的变量时,该变量会得到一个原始数组的一个副本。对新变量进行更改,不会影响原始数组;
- 示例:
1 // 示例1: 2 3 package main 4 5 import "fmt" 6 7 func main() { 8 a := [...]string{"USA", "China", "India", "Germany", "France"} 9 b := a // a copy of a is assigned to b 10 b[0] = "Singapore" 11 fmt.Println("a is ", a) 12 fmt.Println("b is ", b) 13 } 14 // 打印内容: 15 a is [USA China India Germany France] 16 b is [Singapore China India Germany France] 17 18 19 // 示例2: 20 package main 21 22 import "fmt" 23 24 func changeLocal(num [5]int) { 25 num[0] = 55 26 fmt.Println("inside function ", num) 27 } 28 func main() { 29 num := [...]int{5, 6, 7, 8, 8} 30 fmt.Println("before passing to function ", num) 31 changeLocal(num) //num is passed by value 32 fmt.Println("after passing to function ", num) 33 } 34 35 // 打印内容: 36 before passing to function [5 6 7 8 8] 37 inside function [55 6 7 8 8] 38 after passing to function [5 6 7 8 8]