From afcd65e167b5c8d9618bb45317d01b7c500fd48a Mon Sep 17 00:00:00 2001 From: astaxie Date: Mon, 9 Mar 2015 00:19:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0slice=E7=9A=84=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E4=B8=AA=E5=8F=82=E6=95=B0=E7=9A=84=E8=AE=B2=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh/02.2.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/zh/02.2.md b/zh/02.2.md index 21a249cb..7a61472b 100644 --- a/zh/02.2.md +++ b/zh/02.2.md @@ -227,8 +227,6 @@ Go内置有一个`error`类型,专门用来处理错误信息,Go的`package` prefix string ) ->除非被显式设置为其它值或`iota`,每个`const`分组的第一个常量被默认设置为它的0值,第二及后续的常量被默认设置为它前面那个常量的值,如果前面那个常量的值是`iota`,则它也被设置为`iota`。 - ### iota枚举 Go里面有一个关键字`iota`,这个关键字用来声明`enum`的时候采用,它默认开始值是0,每调用一次加1: @@ -246,6 +244,8 @@ Go里面有一个关键字`iota`,这个关键字用来声明`enum`的时候采 e, f, g = iota, iota, iota //e=0,f=0,g=0 iota在同一行值相同 ) +>除非被显式设置为其它值或`iota`,每个`const`分组的第一个常量被默认设置为它的0值,第二及后续的常量被默认设置为它前面那个常量的值,如果前面那个常量的值是`iota`,则它也被设置为`iota`。 + ### Go程序设计的一些规则 Go之所以会那么简洁,是因为它有一些默认的行为: - 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量;小写字母开头的就是不可导出的,是私有变量。 @@ -379,6 +379,19 @@ slice有一些简便的操作 注:`append`函数会改变`slice`所引用的数组的内容,从而影响到引用同一数组的其它`slice`。 但当`slice`中没有剩余空间(即`(cap-len) == 0`)时,此时将动态分配新的数组空间。返回的`slice`数组指针将指向这个空间,而原数组的内容将保持不变;其它引用此数组的`slice`则不受影响。 +从Go1.2开始slice支持了三个参数的slice,之前我们一直采用这种方式在slice或者array基础上来获取一个slice + + var array [10]int + slice := array[2:4] + +这个例子里面slice的容量是8,新版本里面可以指定这个容量 + + slice = array[2:4:7] + +上面这个的容量就是`7-2`,即5。这样这个产生的新的slice就没办法访问最后的三个元素。 + +如果slice是这样的形式`array[:i:j]`,即第一个参数为空,默认值就是0。 + ### map `map`也就是Python中字典的概念,它的格式为`map[keyType]valueType` @@ -448,6 +461,8 @@ slice有一些简便的操作 图2.5 make和new对应底层的内存分配 + +## 零值 关于“零值”,所指并非是空值,而是一种“变量未填充前”的默认值,通常为0。 此处罗列 部分类型 的 “零值”