美文网首页
study_go_day4 slice

study_go_day4 slice

作者: 无风起个浪 | 来源:发表于2019-03-08 21:14 被阅读0次

    package main

    import "fmt"

    //slice本身是没有数据,是对底层array的一个view。

    //slice 底层实现 有三个值 ptr指向第一个值 len长度  cap代表整个arr长度从ptr到结束

    //slice是可以向后扩展,不能向前扩展,s[i] 不可以超越len(s),向后扩展不可以超越底层数组cap(s)

    func main() {

    arr := [...]int{0,1,2,3,4,5,6,7}

    s := arr[2:6]

    s1 := arr[:6]

    s2 := arr[2:]

    s3 := arr[:]

    fmt.Println(s,s1,s2,s3)

    //reslice

      s = s[1:]

    fmt.Printf("s = %v,len(s)=%d,cap(s)=%d\n",s,len(s),cap(s))

    s = s[:4]

    fmt.Printf("s = %v,len(s)=%d,cap(s)=%d\n",s,len(s),cap(s))

    s4 := append(s,10)

    s5 := append(s4,11)

    s6 := append(s5,12)

    fmt.Println("s4,s5,s6 = ",s4,s5,s6)

    /*s5和s6底层不是arr 是view的一个新的array

    添加元素时如果超越cap,系统从新分配更大的底层数组,并且拷贝原来数组元素

    go语言有垃圾回收机制,原来数组有使用就在,没有使用、将会被回收

    由于值传递的关系,必须接收append的返回值

    */

      fmt.Println("arr = ",arr)

    var d []int//zero vlaue for slice is nil s == nil

      for i :=0;i <100 ;i++  {

    printSlice(d)

    d = append(d,2 * i +1)

    }

    fmt.Println(d)

    }

    func printSlice(s []int)  {

    fmt.Printf("len(s)=%d,cap(s)=%d\n",len(s),cap(s))

    }

    相关文章

      网友评论

          本文标题:study_go_day4 slice

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