golang数组
数组是golang中的一种数据结构。它是一种元素个数固定(长度固定),元素数据类型相同的集合。长度固定则意味着数组是无法扩容的,因为这个原因,所以在我们开发过程中,很少会去使用数组。但是我们仍然要去学习它,因为go中有多种其他数据类型底层结构用到了数组。学习了数组,对于我们日后去深入go底层有很大的帮助。
1、数组声明
var 数组变量名 [数组长度]数据类型
var s [5]string // 声明一个长度为5,数据类型为string的数组s
var m [10]int //声明一个长度为10,数据类型为int的数组m
2、数组初始化
指定数组长度,不指定数组初始化列表,由编译器根据数据类型设置默认值
var s [3]string // ["" "" ""]
var m [3]int //[0 0 0]
var n [3]float //[0 0 0]
var f [3]false //[false false false]
指定数组长度,并指定数组初始化列表
var m = [3]int{1, 2, 3} // [1 2 3]
不指定数组长度,指定数组初始化列表,数组长度由编译器根据初始化列表长度推导
var m = [...]int{1, 2, 3, 4} // 数组长度为4
根据指定索引值来初始化数组
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
}
3、数组遍历
数组遍历有两种方法,一种是索引遍历,一种是for range
遍历
func main() {
arr := [5]int{1, 2, 3, 4, 5}
// 索引遍历
for i := 0; i < len(arr); i++ {
fmt.Println(arr[i])
}
// for range遍历
for index, value := range arr{
// index表示下标
fmt.Println(index, ":", value)
}
}
4、数组是值类型
go语言中数组是值类型,在赋值或者传参的时候会复制整个数组,因此改变副本的值,不会改变自身的值。
func modifyArray(arr [3]int) {
arr[2] = 10
}
func main() {
arr := [3]int{1, 2, 3}
modifyArray(arr)
fmt.Println(arr[2]) // 打印结果:3,说明数组是值类型。函数中改变的是副本的值,而不是本身的值。
}