Browse Source

Update 04.3.md 完善 iota 的重要特性描述以及示例 (#770)

Co-authored-by: ᴜɴᴋɴᴡᴏɴ <[email protected]>
Snile 5 năm trước cách đây
mục cha
commit
e608c2672f
1 tập tin đã thay đổi với 32 bổ sung31 xóa
  1. 32 31
      eBook/04.3.md

+ 32 - 31
eBook/04.3.md

@@ -76,51 +76,52 @@ 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 的使用涉及到非常复杂多样的情况,这里作者解释的并不清晰,因为很难对 iota 的用法进行直观的文字描述。如希望进一步了解,请观看视频教程 [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming) [第四课:常量与运算符](https://github.com/Unknwon/go-fundamental-programming/blob/master/lectures/lecture4.md)** )
-
-`iota` 也可以用在表达式中,如:`iota + 50`。在每遇到一个新的常量块或单个常量声明时, `iota` 都会重置为 0( **简单地讲,每遇到一次 const 关键字,iota 就重置为 0** )。
+// 赋值两个常量,iota 只会增长一次,而不会因为使用了两次就增长两次
+const (
+	Apple, Banana = iota + 1, iota + 2 // Apple=1 Banana=2
+	Cherimoya, Durian                  // Cherimoya=2 Durian=3
+	Elderberry, Fig                    // Elderberry=3, Fig=4
 
-当然,常量之所以为常量就是恒定不变的量,因此我们无法在程序运行过程中修改它的值;如果你在代码中试图修改常量的值则会引发编译错误。
+)
 
-引用 `time` 包中的一段代码作为示例:一周中每天的名称。
+// 使用 iota 结合 位运算 表示资源状态的使用案例
+const (
+	Open = 1 << iota  // 0001
+	Close             // 0010
+	Pending           // 0100
+)
 
-```go
 const (
-	Sunday = iota
-	Monday
-	Tuesday
-	Wednesday
-	Thursday
-	Friday
-	Saturday
+	_           = 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)
 )
 ```
 
-你也可以使用某个类型作为枚举常量的类型:
+( **译者注:关于 iota 的使用涉及到非常复杂多样的情况,这里作者解释的并不清晰,因为很难对 iota 的用法进行直观的文字描述。如希望进一步了解,请观看视频教程 [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming) [第四课:常量与运算符](https://github.com/Unknwon/go-fundamental-programming/blob/master/lectures/lecture4.md)** )
 
-```go
-type Color int
+`iota` 也可以用在表达式中,如:`iota + 50`。在每遇到一个新的常量块或单个常量声明时, `iota` 都会重置为 0( **简单地讲,每遇到一次 const 关键字,iota 就重置为 0** )。
+
+当然,常量之所以为常量就是恒定不变的量,因此我们无法在程序运行过程中修改它的值;如果你在代码中试图修改常量的值则会引发编译错误。
 
-const (
-	RED Color = iota // 0
-	ORANGE // 1
-	YELLOW // 2
-	GREEN // ..
-	BLUE
-	INDIGO
-	VIOLET // 6
-)
-```
 
 ## 链接