go语言切片和数组

☆樱花仙子☆ 提交于 2019-12-11 18:17:09

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)
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!