数组的定义
数组是具有相同数据类型的数据项组成的一组固定长度的序列,数据项叫数组的元素。
数组的声明
需要指定组成元素类型和存储数量,在数组声明后,长度是不可修改,数组的元素会根据对应类型的零值来初始化的。
package main
import (
"fmt"
)
func main() {
var names [10]string // 定义长度为10的字符串数组
var ages [10]int // 定义长度为10的整型数组
fmt.Printf("%T, %T\n", names, ages) // 打印类型
fmt.Printf("%#v, %#v\n", names, ages)
fmt.Println(names)
fmt.Println(ages)
}
结果
[10]string, [10]int
[10]string{"", "", "", "", "", "", "", "", "", ""}, [10]int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
[ ]
[0 0 0 0 0 0 0 0 0 0]
初始化
有三种方法定义: 1、指定数组长度:[length]type{xx,xxx,xxxx} 2、使用初始化元素数量推到数组长度:[…]type{xx,xx,xx} 3、对指定位置元素进行初始化:[length]type{1:xx,2:xx}
package main
import (
"fmt"
)
func main() {
var users1 [3]string = [3]string{"a1", "a2", "a3"}
users2 := [...]int{1, 2, 3}
users3 := [2]string{"users3"}
users4 := [3]int{1:2}
fmt.Printf("类型:%T,内容:%#v\n", users1, users1)
fmt.Printf("类型:%T,内容:%#v\n", users2, users2)
fmt.Printf("类型:%T,内容:%#v\n", users3, users3)
fmt.Printf("类型:%T,内容:%#v\n",users4, users4)
}
结果:
类型:[3]string,内容:[3]string{"a1", "a2", "a3"}
类型:[3]int,内容:[3]int{1, 2, 3}
类型:[2]string,内容:[2]string{"users3", ""}
类型:[3]int,内容:[3]int{0, 2, 0}
操作
1、关系运算(== !=)
package main
import (
"fmt"
)
func main() {
nums := [3]int{1,2,3}
fmt.Println(nums == [...]int{1,2,3})
fmt.Println(nums != [...]int{1,2,3})
}
结果
true
false
2、获取数组长度
用len函数可获取数组的长度
package main
import (
"fmt"
)
func main() {
nums := [3]int{1,2,3}
fmt.Println(len(nums))
}
结果
3
3、访问和修改数组
利用索引可对数组进行访问和修改
package main
import (
"fmt"
)
func main() {
nums := [3]int{1,2,3}
fmt.Println(nums[0])
nums[0] = 0
fmt.Println(nums)
}
结果
1
[0 2 3]
4、切片
array[start:end]/array[start
cap](end<=cap<=len)获取数组的一部分元素叫做切片
package main
import (
"fmt"
)
func main() {
nums := [...]int{1,2,3,4,5,6,7,8,9}
fmt.Println(nums[1:5])
fmt.Printf("%T, %#v\n", nums[1:3:3], nums[1:3:3])
}
结果
[2 3 4 5]
[]int, []int{2, 3}
5、遍历
1、通过for len方式
package main
import (
"fmt"
)
func main() {
nums := [...]int{1,2,3,4,5,6,7,8,9}
for i := 0; i < len(nums); i++ {
fmt.Println(nums[i])
}
}
2、通过for range方式(range返回两个元素分别为元素的索引和值)
package main
import (
"fmt"
)
func main() {
nums := [...]int{1,2,3,4,5,6,7,8,9}
for i, v := range nums {
fmt.Println(i, v)
}
}
多维数组
和数组类似,区别在于元素也可以是数组类型的,声明和初始化都和数组一样。