Skip to content

Commit afcd65e

Browse files
committed
添加slice的第三个参数的讲解
1 parent b64e38d commit afcd65e

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

zh/02.2.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,6 @@ Go内置有一个`error`类型,专门用来处理错误信息,Go的`package`
227227
prefix string
228228
)
229229

230-
>除非被显式设置为其它值或`iota`,每个`const`分组的第一个常量被默认设置为它的0值,第二及后续的常量被默认设置为它前面那个常量的值,如果前面那个常量的值是`iota`,则它也被设置为`iota`
231-
232230
### iota枚举
233231

234232
Go里面有一个关键字`iota`,这个关键字用来声明`enum`的时候采用,它默认开始值是0,每调用一次加1:
@@ -246,6 +244,8 @@ Go里面有一个关键字`iota`,这个关键字用来声明`enum`的时候采
246244
e, f, g = iota, iota, iota //e=0,f=0,g=0 iota在同一行值相同
247245
)
248246

247+
>除非被显式设置为其它值或`iota`,每个`const`分组的第一个常量被默认设置为它的0值,第二及后续的常量被默认设置为它前面那个常量的值,如果前面那个常量的值是`iota`,则它也被设置为`iota`
248+
249249
### Go程序设计的一些规则
250250
Go之所以会那么简洁,是因为它有一些默认的行为:
251251
- 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量;小写字母开头的就是不可导出的,是私有变量。
@@ -379,6 +379,19 @@ slice有一些简便的操作
379379
注:`append`函数会改变`slice`所引用的数组的内容,从而影响到引用同一数组的其它`slice`
380380
但当`slice`中没有剩余空间(即`(cap-len) == 0`)时,此时将动态分配新的数组空间。返回的`slice`数组指针将指向这个空间,而原数组的内容将保持不变;其它引用此数组的`slice`则不受影响。
381381

382+
从Go1.2开始slice支持了三个参数的slice,之前我们一直采用这种方式在slice或者array基础上来获取一个slice
383+
384+
var array [10]int
385+
slice := array[2:4]
386+
387+
这个例子里面slice的容量是8,新版本里面可以指定这个容量
388+
389+
slice = array[2:4:7]
390+
391+
上面这个的容量就是`7-2`,即5。这样这个产生的新的slice就没办法访问最后的三个元素。
392+
393+
如果slice是这样的形式`array[:i:j]`,即第一个参数为空,默认值就是0。
394+
382395
### map
383396

384397
`map`也就是Python中字典的概念,它的格式为`map[keyType]valueType`
@@ -448,6 +461,8 @@ slice有一些简便的操作
448461

449462
图2.5 make和new对应底层的内存分配
450463

464+
465+
## 零值
451466
关于“零值”,所指并非是空值,而是一种“变量未填充前”的默认值,通常为0。
452467
此处罗列 部分类型 的 “零值”
453468

0 commit comments

Comments
 (0)