go语言中数组切片(slice)创建一般有两种种方式:
数组切片的创建
- 直接创建:
arr := make([]int,10) - 基于数据创建
arr := arr2[frist:last]
该切片的元素为从下标为frist的元素开始,到小标位last-1元素,左闭右开
arr := arr2[:]
arr := arr2[0:]
arr := arr2[0:len(arr2)]
上面三种写法的表示arr2中的所有元素都被arr包含
数组切片的结构
数组切片的结构可以抽象为3个变量:
- 一个指向原生数组的指针 ptr
- 数组切片的元素个数 num
- 数组切片已分配的内存 mem
当我们通过一个数组给一个数组切片赋值的时,ptr指针会指向原数组frist元素所在的位置,num= last-frist,mem这块还没找到相关资料后续补充
代码如下:
package main
import "fmt"
func main(){
arr := []int{1,2,3,4,5,6}
for i,n := range arr{
fmt.Println(i ," = ",n)
}
fmt.Println("\n")
arr2 := arr[0:3]
for i,n := range arr2{
fmt.Println(i ," = ",n)
}
}
0 = 1
1 = 2
2 = 3
3 = 4
4 = 5
5 = 6
0 = 1
1 = 2
2 = 3
Process finished with exit code 0
package main
import "fmt"
func main(){
arr := []int{1,2,3,4,5,6}
for i,n := range arr{
fmt.Println(i ," = ",n)
}
fmt.Println("\n")
arr2 := arr[1:3]
for i,n := range arr2{
fmt.Println(i ," = ",n)
}
}
运行结果:
0 = 1
1 = 2
2 = 3
3 = 4
4 = 5
5 = 6
0 = 2
1 = 3
Process finished with exit code 0