Go 切片(slice)使用

Go 切片(slice)使用

切片是对数组的一个连续片段的引用,所以切片是一个引用类型。切片本身不拥有任何数据,它们只是对现有数组的引用,每个切片值都会将数组作为其底层的数据结构;slice的语法与数组很像,只是没有固定的长度而已

切片的创建
  • 使用 [ ]Type可以创建一个代用Type类型的切片

    func test04() {
    	//声明一个整型切片
    	var numList []int
    	fmt.Println(numList)
    	//声明一个空切片
    	var numListEmpty = []int{}
    	fmt.Println(numListEmpty)
    }
    
  • 可以使用make函数构造一个切片,格式为make([]Type,size,cap)

    //指针:是指向第一个切片元素对应的底层数组元素的地址。(切片的一个元素不一定是数组中的第一个元素)
    //长度:切片中的元素个数
    //容量:从切片的开始位置到底层数据的结尾位置
    list :=make([]int,5,5)
    fmt.Println(list)
    
  • 可以 以一个数组的某个片段创建一个切片

    func test05() {
    	arr := []string{"风之极-刮痧", "焰分-赤浪尺", "八极崩", "第九魂技", "菊花残-满地伤"}
    	slice1 := arr[1:3]
    	fmt.Println(slice1) //打印:[焰分-赤浪尺 八极崩](取到索引为1和2,就是开始可以取到,结尾取不到)
    	fmt.Println(arr)    //打印:[风之极-刮痧 焰分-赤浪尺 八极崩 第九魂技 菊花残-满地伤]
    }
    
  • 切片的使用

    func emptySlice()  {
    	var numList []int
    	fmt.Println(numList==nil)//true
    	fmt.Println(len(numList)==0)//true  判断切片是否为空
    }
    
    func modifySlice() {
    	arr := [...]string{"风之极-刮痧", "焰分-赤浪尺", "八极崩", "第九魂技", "菊花残-满地伤", "神罗万象"}
    	s := arr[:]
    	fmt.Println(arr)
    	fmt.Println(s)
    
    	fmt.Println("---------修改第一个元素之后--------")
    	s[0] = "西漳"
    	fmt.Println(arr)
    	fmt.Println(s)
    	/**
    	打印结果:
    	[风之极-刮痧 焰分-赤浪尺 八极崩 第九魂技 菊花残-满地伤 神罗万象]
    	[风之极-刮痧 焰分-赤浪尺 八极崩 第九魂技 菊花残-满地伤 神罗万象]
    	---------修改第一个元素之后--------
    	[西漳 焰分-赤浪尺 八极崩 第九魂技 菊花残-满地伤 神罗万象]
    	[西漳 焰分-赤浪尺 八极崩 第九魂技 菊花残-满地伤 神罗万象]
    	*/
    }
    
    func appendSliceData() {
    	s := []string{"张三"}
    	fmt.Println(cap(s))
    	//追加一个元素
    	s = append(s, "焰分-赤浪尺")
    	fmt.Println(cap(s))
    	//追加两个元素
    	s = append(s, "八极崩 第九魂技", "菊花残-满地伤")
    	fmt.Println(cap(s))
    	//追加一个切片
    	s = append(s, []string{"风之极-刮痧", "焰分-赤浪尺"}...)
    	fmt.Println(cap(s))//切片容量每次会扩大原来的两倍
    	fmt.Println(s) 
        /**
    	1
    	2
    	4
    	8
    	*/
    	//[张三 焰分-赤浪尺 八极崩 第九魂技 菊花残-满地伤 风之极-刮痧 焰分-赤浪尺]
    }
    
  • 切片的长度和容量

    一个切片slice由三个部分构成:指针、长度、容量;指针指向第一个slice元素对应的底层数组元素的地址,要注意的是slice的一个元素并不一定就是数组的第一个个元素;长度对应的slice中元素的数目,长度不能超过容量,容量一般是从slice的开始位置到底层数据的结尾位置。简单的讲,容量就是从创建切片索引开始的底层数组中的元素个数,而长度是切片中的元素个数。

    内置的len和cap 函数分别是slice的长度和容量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值