golang中切片(slice)的坑

golang中数组的长度是不可以变得,但是某些场合就不使用了,GO提供了一种灵活,功能强悍的类型—切片,切片中有两种概念:一种是len长度,二是cap容量,长度是已经被赋值的最大下标+1,可以通过len函数获得切片的长度。容量是指切片最大可容纳多少个元素,可以通过cap函数获得,切片是引用类型,因此在当传递切片的时候将引用统一指针,修改其值,将也会影响其他的对象,

初始化

切片可以通过数组来初始化,也可以通过make函数初始化。初始化时len=cap,在最佳元素时如果容量cap不足将按照len的二倍扩容,引用的地址也将改变。

这个是容量足够使用的引用传递

package main

import "fmt"

func main()  {
    s := []int{1,2,3,4,5}
    ss := s[0:2]

    ss = append(ss, 4)
    for _,v := range ss{
        v = v + 10
    }

    for i := range ss{
        ss[i] = ss[i] + 10
    }
    fmt.Println(s)
}

这个是容量不足,将从新开辟内存,不在引用原来的切片

package main

import "fmt"

func main()  {
    s := []int{1,2,3,4,5}
    ss := s[0:]

    ss = append(ss, 4)
    for _,v := range ss{
        v = v + 10
    }

    for i := range ss{
        ss[i] = ss[i] + 10
    }
    fmt.Println(s)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值