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