切片和数组的类型有什么不一样,我们可以打印一下,就可以知道两者的区别了,数组是容量的,所以中括号中有容量,切片的动态数组,是没有容量,这是数组和切片最大的区别
test8_4 := [20] int {0,1,2,3,4,5,6,7,8,9} test8_5 := [] int {0,1,2,3,4,5,6,7,8,9} fmt.Println(reflect.TypeOf(test8_4),reflect.TypeOf(test8_5)) //[20]int []int
1、定义一个切片和切片的常见操作
package main import "fmt" //切片 //数组的长度在定义后就不能在变了,go语言提供了一个数组切片slice来弥补数组的不足,他的长度是可以更改的 func main() { //申明一个空的切片 var s1 []int s2 := []int{} //使用make创建一个切片,当前的长度为0 var s3 []int = make([]int,0) s4 := make([]int,0,0) fmt.Println(s1) fmt.Println(s2) fmt.Println(s3) fmt.Println(s4) //[] //[] //[] //[] arr := [...]int{0,1,2,3,4,5,6,7,8,9} fmt.Println("arr[2:6]=",arr[2:6]) //arr[2:6]= [2 3 4 5] fmt.Println("arr[:6]=",arr[:6]) //arr[:6]= [0 1 2 3 4 5] fmt.Println("arr[2:]=",arr[2:]) //arr[2:]= [2 3 4 5 6 7 8 9] fmt.Println("arr[:]=",arr[:]) //arr[:]= [0 1 2 3 4 5 6 7 8 9] //内建函数,append,给切片的尾部增加元素 var s5 []int //追加一个元素 s5 = append(s5,1) fmt.Println(s5) //[1] //追加2个元素 s5 = append(s5,2,3) fmt.Println(s5) //[1 2 3] //创建一个指定大小的切片 s6 := make([]int,5) s6 = append(s6,6) fmt.Println(s6) //[0 0 0 0 0 6] //创建一个有值的切片 s7 := []int{1,2,3,4} s7 = append(s7,5) fmt.Println(s7) //[1 2 3 4 5] s7 = append(s7,6,7) fmt.Println(s7) //[1 2 3 4 5 6 7] }
2、切片操作是引用,修改切片后的数组也会导致原来的切片数据变化,这里和python是不同的
package main import "fmt" func main() { arr1 := [...]int{0,1,2,3,4,5,6,7,8,9} s1 := arr1[2:] fmt.Println(s1) //[2 3 4 5 6 7 8 9] s1[0] = 100 fmt.Println(s1) //[100 3 4 5 6 7 8 9] fmt.Println(arr1) //[0 1 100 3 4 5 6 7 8 9] }
3、查看切片的长度和容量,切片出来的数据的容量是从开始的下标开始,到切片的原始数据的结尾做为结束
package main import "fmt" func main() { arr1 := [...]int{0,1,2,3,4,5,6,7,8,9} s1 :=