Ted's Blog



go语言学习经验分享-5 [数组/切片] -- [len/cap]

想了一下还是把两个内容和到一起来分享


内容一:

之前说了 数组和切片 这两个东西其实很好理解

1、数组是一个固定长度的序列

2、切片是数组的一个引用


就可以理解数组是一个安保队 一个安保队有10个人 他们是一个实体 是真是存在的

var team = [10]{1,2,3,4,5,6,7,8,9,10}


那切片就可以理解成安保队长,安保队长也是一个实体 但是他可以调度使用安保队的人

var teamLeader = team[:]

var teamLeader = team[1:3]

var teamLeader = team[:5]

var teamLeader = team[3:]


当安保队长teamLeader 作出操作得时候 保安队team也跟着相应的变化

比如说他瞧不上team站在第一的那小子 1 他要把 第一个位置留给自己的小舅子 100

teamLeader[0] = 100


这时候 team 就变成了 小舅子站在第一位

[100 2 3 4 5 6 7 8 9 10]


内容二:

len() 和 cap()

首先要知道什么是 len 什么是cap ?

答:

        len 可以用来查看 数组或切片的长度

        cap 可以用来查看 数组或切片的容量


问题又来了 什么是长度什么是容量?

这里理解懂的人自己出去玩去、不会的留下

举个栗子🌰

    容量就好比水杯、长度就好比水杯里的水

    所以说 水杯只能装下他所属容量的水 好比500ml的水杯 只能装500ml的水

    反过来讲 len <= cap


如果我有600ml的水 我要装进水杯

这时候只能再拿一个杯子 用两个杯子

一个杯子装 500毫升的水 一个杯子装 100毫升的水

就是说 len = 600,cap = 1000

所以append追加切片超过cap限制容量时 重新分配的cap容量会是之前的2倍


这时候切片的内存地址会发生改变 可以理解 内容一 中的队长为5个小舅子安排工作

每个安保队名额限制 10人 多出来的人 就安排在B队里

因为队长从管理一个队变成管理两队 所有变成了安保经理 title变了 对应切面内存地址改变


代码链接 https://github.com/tebie6/education/blob/master/demo/base/len_cap.go

分享:

写评论


Contact ME

github:https://github.com/tebie6

email:liumingyuphp@163.com

友情链接

无敌我大鑫哥:http://dream128.cn