slice

package main

import (
    "fmt"
    "unsafe"
)

type Slice struct {
    ptr unsafe.Pointer
    len int
    cap int
}

func printSlice(name string, s []int) {
    myS := (*Slice)(unsafe.Pointer(&s))
    fmt.Printf("name:%+v\n", myS)
}

func main() {
    s1 := make([]int, 6)
    fmt.Printf("s1=%+v len=%d cap=%d\n", s1, len(s1), cap(s1))
    printSlice("s1", s1)

    s2 := s1[2:3]
    printSlice("s2", s2)
    
    s3 := s1[3:6:15]
    printSlice("s3", s3)

    fmt.Println("vim-go")
}

s3:=s1[2:3:4] s3的ptr指向s1底层array的2号位置,长度为3-2=1,cap的结尾指向s1底层array的4号位置,即cap=4-2=2

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文只是关注于 slice 的表示方式,它们可以创建两种类型的值: 截断的string 指向array或者slic...
    QFdongdong阅读 561评论 0 0
  • Go 语言中,slice表示一个拥有相同类型元素的可变长度序列。slice通常被写为[]T,其中元素的类型都是T;...
    副班长国伟阅读 1,586评论 0 1
  • package main import "fmt" //slice本身是没有数据,是对底层array的一个view...
    无风起个浪阅读 190评论 0 0
  • 其本身并不是数组,它指向底层的数组作为变长数组的替代方案,可以关联底层数组的局部或全部为引用类型可以直接创建或从底...
    haokeed阅读 246评论 0 0
  • 这部分: 有时候可能需要使用一些比较tricky的技巧,比如利用make弄一块内存自己管理,或者用cgo之类的方式...
    HuJay阅读 637评论 0 0