From e608c2672f2d6bc433e734a63c35221016b534b6 Mon Sep 17 00:00:00 2001 From: Snile <826245622@qq.com> Date: Sun, 16 Aug 2020 19:38:48 +0800 Subject: [PATCH] =?UTF-8?q?Update=2004.3.md=20=20=E5=AE=8C=E5=96=84=20iota?= =?UTF-8?q?=20=E7=9A=84=E9=87=8D=E8=A6=81=E7=89=B9=E6=80=A7=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E4=BB=A5=E5=8F=8A=E7=A4=BA=E4=BE=8B=20(#770)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: ᴜɴᴋɴᴡᴏɴ --- eBook/04.3.md | 67 ++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/eBook/04.3.md b/eBook/04.3.md index 3079465..addf50e 100644 --- a/eBook/04.3.md +++ b/eBook/04.3.md @@ -76,13 +76,43 @@ const ( ) ``` -第一个 `iota` 等于 0,每当 `iota` 在新的一行被使用时,它的值都会自动加 1;所以 `a=0, b=1, c=2` 可以简写为如下形式: +第一个 `iota` 等于 0,每当 `iota` 在新的一行被使用时,它的值都会自动加 1,并且没有赋值的常量默认会应用上一行的赋值表达式: ```go +// 赋值一个常量时,之后没赋值的常量都会应用上一行的赋值表达式 const ( - a = iota - b - c + a = iota // a = 0 + b // b = 1 + c // c = 2 + d = 5 // d = 5 + e // e = 5 +) + +// 赋值两个常量,iota 只会增长一次,而不会因为使用了两次就增长两次 +const ( + Apple, Banana = iota + 1, iota + 2 // Apple=1 Banana=2 + Cherimoya, Durian // Cherimoya=2 Durian=3 + Elderberry, Fig // Elderberry=3, Fig=4 + +) + +// 使用 iota 结合 位运算 表示资源状态的使用案例 +const ( + Open = 1 << iota // 0001 + Close // 0010 + Pending // 0100 +) + +const ( + _ = iota // 使用 _ 忽略不需要的 iota + KB = 1 << (10 * iota) // 1 << (10*1) + MB // 1 << (10*2) + GB // 1 << (10*3) + TB // 1 << (10*4) + PB // 1 << (10*5) + EB // 1 << (10*6) + ZB // 1 << (10*7) + YB // 1 << (10*8) ) ``` @@ -92,35 +122,6 @@ const ( 当然,常量之所以为常量就是恒定不变的量,因此我们无法在程序运行过程中修改它的值;如果你在代码中试图修改常量的值则会引发编译错误。 -引用 `time` 包中的一段代码作为示例:一周中每天的名称。 - -```go -const ( - Sunday = iota - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday -) -``` - -你也可以使用某个类型作为枚举常量的类型: - -```go -type Color int - -const ( - RED Color = iota // 0 - ORANGE // 1 - YELLOW // 2 - GREEN // .. - BLUE - INDIGO - VIOLET // 6 -) -``` ## 链接