【Go】(五)Go基础 -- Slice

  • slice表示一个拥有相同类型元素的可变长度序列
  • 数组和slice是紧密相连的,每个非nil类型的slice都有属于他的底层数组,一个底层数组可以对应多个slice,slice可以用于访问数组的全部或部分元素

一、slice定义和使用

slice有三个重要的属性

  • 指针:指向slice第一个元素的地址
  • 长度:通过len获取,表示当前slice有多少个元素,不能超过slice的容量
  • 容量:通过cap获取,容量的大小通常是slice的起始到结束的元素个数,如果使用超出了slice的容量,就会引发panic

slice的基本定义

// slice的默认值是nil,此时len和cap都为0
var a []int
a == nil // true

// 此时len cap都是0,但是不为nil
var b []int{}
b == nil // false


// 可以在定义的时候,指定slice里面的元素,此时len=3, cap=3
var c []int {1,2,3}

// 通过make创建make([]T, len, cap)
var d = make([]int, 3, 5)  // {0, 0, 0}
// 等同于
var e = make([]int, 5)[:3]

先定义好数组,然后定义slice使用该数组作为底层数组

var months [...]string {1: "Jan.", /* ... */ 12: "Dec."}
// 定义slice
Q2 := months[4:7]
summer := months[6:9]

当前结构如下图所示:

如果slice的引用超过了该slice的cap,会panic,但是如果超过了len,最终slice会比原slice长

summer[:20] // panic
summer[:5] // => [June, July, August, September, October]

二、slice的比较

  • slice不像数组那样,可以直接通过==或者!=进行比较,slice唯一可以比较的就是nil

  • 标准库提供了bytes.Equal方法用于比较两个字节slice, 其他类型的slice比较需要自己写

三、append函数

append函数用于将元素追加到slice的末尾

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值