go切片的常用操作

首先我们应该知道go没有引用类型只有值类型。

那么切片可以理解为一个指针类型,切片的参数传递就是指针的值传递

sli := []int{0,1,2,3,4} 

追加操作

追加操作返回的切片的内存地址,可能不是原来的地址,所以append操作是需要返回值的。

这个涉及到追加之后的扩容问题了。有点类似于C++ vector的扩容过程

sli = append(sli, 100)

初始化

初始化一个大内存,但是不生成元素

sli := make([]int, 0, 1000)/// len =0 cap= 1000

初始化一个大容量,之后调用append的操作,不超过容量的大小,就不会重新分配内存,这个有点类似于C++vector的reserve操作,还是比较有用的,防止内存多次分配和数据交换。

初始化一个固定长度的切片

sli := make([]int, 10)  ///长度10 cap 10  内容全是0

初始化另一个切片,相当于指针赋值操作,指向的内存是一致的

sli1 := sli /// 两者指向的内存一致

删除元素

/// 删除下表为 i 的元素
sli = append(sli[:i] , sli[i+1:]...)
/// 删除头元素
sli = sli[1:]
/// 删除尾元素
sli = sli[:len(sli) -1]

清空切片

sli = nil

访问头元素

ele := sli[0]

访问尾元素

ele := sli[len(sli) - 1]

切片值是nil的时候,可以获取长度

var data []string = nil
if len(data) <= 0 {
 /// OK
}

var data *string = nil
if len(data) <= 0 {
 /// Error
}

深拷贝

	data := []int{1,2,3,4}
	data2 := make([]int, len(data))
	copy(data2, data)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值