切片是数组的引用,引用类型,是动态变化的数组。长度可以变化
1、定义空切片
var keys []int
keys := make([]int,0)
2、定义非空切片
var newslice []int = []int{1,2,3}
var newslice = []int{1,2,3}
newslice := []int{1,2,3}
var slc = make([]int, 4, 10)
slc = []int{1,2,3}
slice就是一个数据结构,里面有三个元素(结构体):指针,长度,容量
实例代码如下
package main
import "fmt"
func main() {
//切片的定义
var arr = [...]int{1,2,3,4,5}
//定义方式一
slice := arr[1:4] //从第1个元素到第3个元素开始引用 左包含右不包含
fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))
fmt.Println(&slice[0])//第一个元素指向数组第一个元素的地址
fmt.Println(&arr[1])
//使用make来创建切片
var slc = make([]int, 4, 10)
slc [3]=2
slc =[]int{1,2,3}
var newslice []int = []int{1,2,3}
fmt.Println("slc=",slc)
fmt.Println(newslice)
//切片遍历两种方式
for i:=0; i<len(newslice); i++{
fmt.Println(i,newslice[i])
}
for i, v := range newslice{
fmt.Println(i,v)
}
//切片是引用类型可以改变引用的所有数组/切片
slc2 := slice[:]
slc2[0]=100
fmt.Println("slc:", slc)
fmt.Println("arr:", arr)
//append使用
var slice2 []int = []int{1,2,3,4,5}
slice2 = append(slice2, 100) //必须要有变量接收
slice3 :=append(slice2, slice2...)//append一个切片
//append又创建了一个数组,slice3指向这个数组,slice指向自己的数组。
slice3[1]=120
fmt.Println("slice2:", slice2)
fmt.Println("slice3:", slice3)
//切片的copy,两个切片数据独立的空间, 两个参数都必须为切片
slice4 := make([]int, 12)
copy(slice4, slice3)
fmt.Println("拷贝之后的slic",slice4)
}
切片是引用类型,当作为参数传递给函数在内部修改切片数组,会直接修改外面的切片数值。