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 := 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] //go语言的切片可以向后扩展,但是不能向前扩展 arr2 := [...]int{0,1,2,3,4,5,6,7,8,9} s9 := arr2[2:6] fmt.Println(s9) //[2 3 4 5] s := s9[3:5] fmt.Println(s) //[5 6] fmt.Printf("s9=%v,长度为%d,容量为%d\n",s9,len(s9),cap(s9)) //s9=[2 3 4 5],长度为4,容量为8 }
原文:https://www.cnblogs.com/bainianminguo/p/10859723.html