Golang 数组和切片
go提供了相应数据类型来存储多个相同类型的元素。它们分别是数组和slice切片
。其中,切片又称动态数组
。
顾名思义,定义切片对数组存储元素的个数不做要求,而普通数组在定义时必须给明个数。
数组
声明和赋值
package main
import "fmt"
func main() {
var array1 [3]int = [3]int{1,2,3}
fmt.Println(array1)
}
先声明后赋值
package main
import "fmt"
func main() {
var array2 [3]int
for index,_ := range array2 {
array2[index] = index + 1
}
fmt.Println(array2)
}
短声明
package main
import "fmt"
func main() {
array3 := [3]int{1,2,3}
fmt.Println(array3)
}
个数推导
package main
import "fmt"
func main() {
array4 := [...]int{1,2,3}
fmt.Println(array4)
}
数组在初始化时必须给定个数,且无法在增加元素。如果要动态操作数组元素,需要使用slice
。
slice切片
方式一
package main
import "fmt"
func main() {
var array1 []int = []int{}
array1 = append(array1,1)
fmt.Println(array1)
}
方式二 make
package main
import "fmt"
func main() {
array2 := make([]int, 0)
array2 = append(array2,1)
fmt.Println(array2)
}
以上,需要指出的是:
元素类型必须相同
插入元素时使用内置函数
append
,不能直接这样写array[0] = 1
// good
array2 = append(array2,1)
// bad
array2[0] = 1
range函数
range
函数是内置函数,可以对可迭代对象进行迭代,与for功能类似
。
package main
import "fmt"
func main() {
array := [...]int {1,2,3}
for index,item := range array {
fmt.Println(index,item)
}
}
可以看到,range
函数返回两个变量,第一个是index
索引值,第二个是当前索引对应的数据。当我们对其中一个变量不需要时,可抛弃。
array := [...]int {1,2,3}
for _,item := range array {
fmt.Println(item)
}
使用_
抛弃当前位置的值。