数组
数组的长度是类型的一部分
- 数组定义和初始化
var 数组变量名 [元素数量]T
var a [3]int
//定义一个长度为3的整型数组a
a[0] = 80
a[1] = 90
a[2] = 10
var arr [3]int
var arr1 [3]string
var arr2 = [3]int{1, 3, 4}
arr3 := [3]string{"php", "nodejs", "golang"}
fmt.Println(arr,arr2,arr2)//[0 0 0] [ ] [1 3 4]
注意:数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。5[int]和4[int]是不同的类型
var arr1 [4]int
var arr2 [5]int
fmt.Printf("arr1=%T arr2=%T", arr1, arr2)
//arr1:[4]int arr2:[5]int
编译器根据初始值的个数自行推断数组长度
var numArray = [...]int{1, 2}
var cityArray = [...]string{"php", "nodejs", "golang"}
指定索引值的方式来初始化数组
func main(){
a := [...]int{1:1, 3:5}
fmt.Pringln(len(arr))//4
}
数组的循环遍历
- for
var arr = [3]int{23,24,5}
for i := 0; i < len(arr); i++ {
fmt.Println(arr[i])
}
- for range
var arr = [3]int{23,24,5}
for k, v := range arr { //k对应下标,v对应值
fmt.Println(v)
}
值类型和引用类型
- 值类型
基本数据类型和数组都是值类型
var a = 10
b := a
a = 20
fmt.Println(a, b)//20 10
var arr1 = [...]int{1, 2, 3}
arr := arr1
arr1[0] = 11
fmt.Println(arr1, arr2)//[11 2 3] [1 2 3]
- 引用类型(切片)
var arr1 = [...]int{1, 2, 3}
arr2 := arr1
arr1[0] = 11
fmt.Println(arr1, arr2)//[11 2 3] [11 2 3]
多维数组
Go语言是支持多维数组的,但通常使用时不会超过二维
var 数组变量名 [元素数量][元素数量]T
//创建一个三行两列的数组
var arr = [3][2]string{
{"北京", "上海"},
{"广州", "深圳"},
{"成都", "重庆"}
}
for _, v1 := range arr {
for _, v2 := range v1{
fmt.Println(v2)
}
}
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Println(arr[i][j])
}
}
多维数组只有在第一层可以使用
...
来让编译器推导数组长度
arr := [...][2]string{
{"北京", "上海"},
{"广州", "深圳"},
{"成都", "重庆"}
}
网友评论