golang 基础(fourteen)slice

作者: zidea | 来源:发表于2019-03-18 05:47 被阅读45次
square-gopher.png

(slice)切片


slice.png

slice 是动态地表述数组的片段
每一个 slice 都包含一个指向数组的片段的指针 ptr,一个 len 用于表示数组片段的长度以及 cap 表示片段可扩展能力。

slice_illustration.JPG
  • s := []int{3,4,5} 有初始化值的初始化
  • s := []int{} 没有初始值的初始化,分配内存
  • s := []int 声明一个 slice ,且暂不分配内存
    这样声明好处当一个slice在随后可能不被使用,所以暂时不分配内存给他。
  • s := make([]int,5,10) 没有初始值的 slice 初始化,分配内存指定 slice 长度并且指定数组的承载能力
func main(){
    arr := [...]int{0,1,2,3,4,5,6,7}
    s := arr[2:6] //[2 3 4 5]
    fmt.Println(s)
}

s 就可以理解为数组 arr 的切片,在计算机中通常截取是半开半闭原则所以 2 是被包含进去而 6 不被包含。

fmt.Println("arr[2:6] = ",arr[2:6])
    fmt.Println(arr[2:])
    fmt.Println(arr[:6])
    fmt.Println(arr[:])

结果自己尝试吧

slice 的长度和可扩展

s := arr[2:6]
    fmt.Println(cap(s)) //6
    fmt.Println(len(s)) //4

长度就不解释,扩展是就是 arr 在 slice 后面还剩几个元素就是 slice 几位可扩展。

还可以对 slice 进行取 slice

s = s[:3]
    fmt.Println(s) //[2 3 4]
    s = s[2:]//[4]
    fmt.Println(s)

那么可以进一步研究一下下面的代码,看一看扩展的用途,这里注意一下 s1 从 s 中进行取值,取值范围已经超出的 s 的长度,但是因为没有超出其扩展,所以 s1 会从数组 arr 进行取值。

s := arr[2:6]
    fmt.Println(cap(s)) //6
    fmt.Println(len(s)) //4

    s1 := s[3:5]
    fmt.Println("s = ",s)
    fmt.Println("s1 = ",s1)
s =  [2 3 4 5]
s1 =  [5 6]
slice_extension.JPG slice_extension_02.JPG
  • s 的值为[2,3,4,5], s2 的值为[5,6]
  • slice 可以向后扩展,不可以向前扩展
  • s[i]不可以超越len(s),向后扩展不可以超越底层数组cap(s)

相关文章

  • golang 基础(fourteen)slice

    (slice)切片 slice 是动态地表述数组的片段每一个 slice 都包含一个指向数组的片段的指针 ptr,...

  • golang 切片小结

    golang slice

  • golang slice的误解

    slice的介绍: 在golang的官方文档中,我们发现golang除了有array的数据还有一个slice,而a...

  • Learn Golang in 21 Days - Day 10

    Learn Golang in 21 Days - Day 10 知识点 切片Slice Slice是对数组的抽象...

  • What the official tutorial didn'

    Whoever follow the Golang official tutorial about Slice t...

  • go array 1:2:3 解释

    https://golang.org/ref/spec#Slice_expressions

  • golang

    golang携程调度,runtime包 golang内存模型 csp原理 context的原理 slice底层结构...

  • golang slice

    关于golang slice有很多大神写了很多文章,阐述了slice的底层实现和使用中注意点.这篇文章是我参考ht...

  • Golang slice

    创建切片,len、cap、append 上述代码是生成默认占用5个0值的切片,下面的输出结果是另一回事 上述代码是...

  • slice in golang

    在go语言中,数组是有特定长度和元素类型共同组成的一种类型,比如[4]int表示4个integer。而[4]int...

网友评论

    本文标题:golang 基础(fourteen)slice

    本文链接:https://www.haomeiwen.com/subject/ipjmmqtx.html