温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Go中slice的使用

发布时间:2020-07-29 09:57:39 阅读:353 作者:ck_god 栏目:编程语言
GO开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>
    //切片并不是数组或数组指针,它通过内部指针和相关属性引用数组片段,以实现变长的方案。
    //slice并不是真正意义上的动态数组,而是一个引用类型。slice总是指向一个底层array,slice的声明也可以像array一样,只是不需要长度。
    //slice和数组的区别:声明数组时,方括号内写明了数组的长度或使用...自动计算长度,而声明slice时,方括号内没有任何字符。
    

Go中slice的使用

slice和数组的区别:声明数组时,方括号内写明了数组的长度或使用...自动计算长度,而声明slice时,方括号内没有任何字符。

第二:注意make只能创建slicemapchannel,并且返回一个有初始值(非零)

操作

含义

s[n]

切片s中索引位置为n的项

s[:]

从切片s的索引位置0len(s)-1处所获得的切片

s[low:]

从切片s的索引位置lowlen(s)-1处所获得的切片

s[:high]

从切片s的索引位置0high处所获得的切片,len=high

s[low:high]

从切片s的索引位置lowhigh处所获得的切片,len=high-low

s[low:high:max]

从切片s的索引位置lowhigh处所获得的切片,len=high-lowcap=max-low

len(s)

切片s的长度,总是<=cap(s)

cap(s)

切片s的容量,总是>=len(s)

示例说明:

操作


结果

len

cap

说明

array[:6:8]


[0 1 2 3 4 5]

6

8

省略 low

array[5:]


[5 6 7 8 9]

5

5

省略 highmax

array[:3]


[0 1 2]

3

10

省略 highmax

array[:]


[0 1 2 3 4 5 6 7 8 9]

10

10

全部省略

第三:切片和底层数组关系

第四,slice的内建函数append和copy的使用

1) append

append函数 slice 尾部添加数据,返回新的 slice 对象

append函数会智能地底层数组的容量增长,一旦超过原底层数组容量,通常以2倍容量重新分配底层数组,并复制原来的数据:

        s = append(s, i)

        if n := cap(s); n > c {

            fmt.Printf("cap: %d -> %d\n", c, n)

            c = n

        }

        cap: 1 -> 2

        cap: 2 -> 4

        cap: 4 -> 8

        cap: 8 -> 16

        cap: 16 -> 32

        cap: 32 -> 64

}

2) copy

函数 copy 在两个 slice 间复制数据,复制⻓度以 len 小的为准两个 slice 可指向同⼀底层数组

第五,切片作为函数的参数使用。

        fmt.Printf("s[%d]=%d, ", i, v)

        //s[0]=-1, s[1]=1, s[2]=2, s[3]=3, s[4]=4, s[5]=5, s[6]=6, s[7]=7, s[8]=8, s[9]=9,

}

        fmt.Printf("slice[%d]=%d, ", i, v)

        //slice[0]=-1, slice[1]=1, slice[2]=2, slice[3]=3, slice[4]=4, slice[5]=5, slice[6]=6, slice[7]=7, slice[8]=8, slice[9]=9,

}

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×