一、数组
1)数组介绍:数组也是一种数据类型,是值类型
优势:2)数组定义和内存布局
var arr [3]int
fmt.Println(arr)
默认为0
3)数组的使用
var score [5]float64
for i:=0;i<len(score);i++{
fmt.Printf("请输入第%d元素的值\n",i+1)
fmt.Scanln(&score[i])
}
for i:=0;i<len(score);i++{
fmt.Printf("score[%d]=%v\n",i,score[i])
}
- 四种初始化数组的方式
var arr=[...]int{1,2,3}
var arr1=[4]int{1,2,3,4}
var arr2=[...]int{1:200,2:23,0:78}
var arr3[3]int=[3]int{1,2,3}
4)for-range遍历
house:=[...]string{"aaa","bbb","ccc"}
for index,value:=range house{
fmt.Printf("index=%v value=%v\n",index,value)
}
for _,value:=range house{
fmt.Printf("value=%v\n",value)
}
5)注意事项和细节
-
一旦声明/定义,长度固定
-
var arr[]int,arr是一个slice切片
-
数组创建后,没有赋值,有默认值
-
数组属于值类型,因此会进行值拷贝
-
在其他函数中,修改原来的数组,可以使用引用传递
-
二、切片
1)基本介绍
var arr=[5]int{11,22,33,44,55}
slice:=arr[1:3]
fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))
2) 切片在内存中形式
3)切片的三种使用方式
- 1.让切片去引用一个已经创建好的数组
var arr=[5]int{11,22,33,44,55}
slice:=arr[1:3]
- 2.通过 make 来创建切片——var 切片名 []type =make([]type, len,
var slice []float64=make([]float64,5,10)
slice[1]=10
slice[0]=20
- 3.定义一个切片,直接就指定具体数组
var slice []string=[]string{"tom","jack","mary"}
fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))
4)切片的遍历
- for-range结构遍历切片
var slice []int=[]int{1,2,3,4,5,6,7};
for index,value:=range slice{
fmt.Printf("index=%d value=%v\n",index,value)
}
5)注意事项
- 切片初始化时 var slice = arr[startIndex:endIndex]
说明:从 arr 数组下标为 startIndex,取到 下标为 endIndex 的元素不含 arr[end] - var slice = arr[0:end] 可以简写 var slice = arr[:end]
var slice = arr[start:len(arr)] 可以简写: var slice = arr[start:]
var slice = arr[0:len(arr)] 可以简写: var slice = arr[ - cap 是一个内置函数,用于统计切片的容量,即最大可以存放多少个元素
- 切片定义完后,还不能使用,因为本身是一个空的,需要让其引用到一个数组,或者 make 一个空间供切片来使用
- 切片可以继续切片
- 用 append 内置函数,可以对切片进行动态追加
var slice []int=[]int{1,2,3,4,5,6}
slice=append(slice,7,8,9)
fmt.Println(slice)
slice=append(slice,slice...)
fmt.Println(slice)
原理:
- 切片的拷贝操作
var slice []int=[]int{1,2,3,4,5,6}
var slice1=make([]int,10)
copy(slice1,slice)
fmt.Println(slice1)
- 切片是引用类型,所以在传递时,遵守引用传递机制。看两段代码,并分析底层原理
总结
本文仅仅简单介绍了Golang数组与切片,此篇是通过b站尚硅谷Golang视频的学习做的笔记。