Go数组和切片
数组和切片
数组和切片是Go语言中常见的数据结构。两者具有相同之处,也有不同之处。
数组
Go数组是长度固定,类型相同的数据序列
- 初始化数组
数组声明时候方括号内需要写明数组的长度或者使用(...)符号自动计算长度
var arr[7]int
var arr2=[...]int{0, 1, 2 ,3 ,4 ,5 ,6}
其中
arr 是数组名称
7 是数组长度
int 是数组类型
在函数中简单初始化
arr := [5]int{}
如果数组中的元素没有定义,元素值是类型的零值
- 访问数组中的元素,数组的索引是从0开始的
package main
import (
"fmt"
)
func main() {
var arr [6]int
fmt.Println(arr[1])
}
程序输出
0
- 修改数组元素的值,指定索引的值,就能修改索引对应元素的值
package main
import "fmt"
func main() {
var arr [7]int
for i := 0; i < 7; i++ {
arr[i] = i
}
fmt.Println(arr)
}
程序输出
[0 1 2 3 4 5 6]
- 获取数组长度
package main
import "fmt"
func main() {
var arr [7]int
for i := 0; i < 7; i++ {
arr[i] = i
}
fmt.Println(len(arr))
}
程序输出
7
切片
Go切片是长度可变,类型相同的数据序列。切片可以追加元素并会在切片容量不足时进行扩容。
- 初始化切片
切片不需要指定数组的长度,使用make,并且只指定切片长度,这个时候切片长度和容量相同,或者同时指定切片的长度和容量。
package main
import (
"fmt"
)
func main() {
slice := make([]int, 1, 1)
fmt.Println(slice)
}
程序输出
[0]
- 切片扩容
可以使用append函数,扩容切片
package main
import (
"fmt"
)
func main() {
s := make([]int, 2, 2)
fmt.Printf("切片是: %v\n", s)
fmt.Printf("长度是:%d,容量是:%d\n", len(s), cap(s))
s = append(s, 1)
fmt.Printf("切片是: %v\n", s)
fmt.Printf("长度是:%d,容量是:%d\n", len(s), cap(s))
}
程序输出
切片是: [0 0]
长度是:2,容量是:2
切片是: [0 0 1]
长度是:3,容量是:4