go语言的切片是动态数组,长度不固定。跟一般的数组不一样。
package main
import "fmt"
func main() {
//Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的
var numbers = make([]int,3,5) //make([]T, length, capacity)创建一个切片,capacity会动态增加。
var iar =[]int{2,3,4,5,6,7,8,9} //这样写是一个数组,
var siar []int //这样是定义了一个空切片,默认值是nil
printSlice(numbers)
printSlice(iar)
printSlice(siar)
//go语言数组或切片都支持这种[:]截取,类似于python中的切片操作,只是少了第2个:后面的步长。
fmt.Println("iar[:2]=",iar[:2])
fmt.Println("iar[1:6]=",iar[1:6])
siar=iar[1:3]
printSlice(siar)
fmt.Println("append")
//append方法是追加多个元素在末尾,后面可以跟不定数目的元素。
iar=append(iar,1,2,3,4)
printSlice(iar)
siar=append(siar,9,10)
printSlice(siar)
fmt.Println("copy")
/*copy方法,前面是目的切片,后面是源切片。
如目的切片长度小于源切片,则只会拷贝跟目的切片长度匹配的。
如目的切片长度大于源切片,则会覆盖目的切片前面几个长度。
*/
siar=make([]int,len(iar))//这里是用make函数重置siar里的数据,按照iar分配更多长度
//这样copy之后,siar就是跟iar一样内容了,否则只是拷贝过来它本身长度的内容。
copy(siar,iar)
printSlice(siar)
}
func printSlice(x []int){
fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}