mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 22:06:51 +08:00
精校:5.3
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。它接受任意形式的表达式:
|
相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。它接受任意形式的表达式:
|
||||||
|
|
||||||
```
|
```go
|
||||||
switch var1 {
|
switch var1 {
|
||||||
case val1:
|
case val1:
|
||||||
...
|
...
|
||||||
@@ -25,7 +25,7 @@ switch var1 {
|
|||||||
|
|
||||||
因此:
|
因此:
|
||||||
|
|
||||||
```
|
```go
|
||||||
switch i {
|
switch i {
|
||||||
case 0: // 空分支,只有当 i == 0 时才会进入分支
|
case 0: // 空分支,只有当 i == 0 时才会进入分支
|
||||||
case 1:
|
case 1:
|
||||||
@@ -35,7 +35,7 @@ switch i {
|
|||||||
|
|
||||||
并且:
|
并且:
|
||||||
|
|
||||||
```
|
```go
|
||||||
switch i {
|
switch i {
|
||||||
case 0: fallthrough
|
case 0: fallthrough
|
||||||
case 1:
|
case 1:
|
||||||
@@ -49,9 +49,9 @@ switch i {
|
|||||||
|
|
||||||
可选的 `default` 分支可以出现在任何顺序,但最好将它放在最后。它的作用类似与 `if-else` 语句中的 `else`,表示不符合任何已给出条件时,执行相关语句。
|
可选的 `default` 分支可以出现在任何顺序,但最好将它放在最后。它的作用类似与 `if-else` 语句中的 `else`,表示不符合任何已给出条件时,执行相关语句。
|
||||||
|
|
||||||
Listing 5.4 [switch1.go](examples/chapter_5/switch1.go):
|
示例 5.4 [switch1.go](examples/chapter_5/switch1.go):
|
||||||
|
|
||||||
```
|
```go
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import "fmt"
|
import "fmt"
|
||||||
@@ -77,7 +77,7 @@ func main() {
|
|||||||
|
|
||||||
在第 12.1 节,我们会使用 switch 语句判断从键盘输入的字符(详见第 12.2 节的 switch.go)。switch 语句的第二种形式是不提供任何被判断的值(实际上默认为判断是否为 true),然后在每个 case 分支中进行测试不同的条件。当任一分支的测试结果为 true 时,该分支的代码会被执行。这看起来非常像链式的 `if-else` 语句,但是在测试条件非常多的情况下,提供了可读性更好的书写方式。
|
在第 12.1 节,我们会使用 switch 语句判断从键盘输入的字符(详见第 12.2 节的 switch.go)。switch 语句的第二种形式是不提供任何被判断的值(实际上默认为判断是否为 true),然后在每个 case 分支中进行测试不同的条件。当任一分支的测试结果为 true 时,该分支的代码会被执行。这看起来非常像链式的 `if-else` 语句,但是在测试条件非常多的情况下,提供了可读性更好的书写方式。
|
||||||
|
|
||||||
```
|
```go
|
||||||
switch {
|
switch {
|
||||||
case condition1:
|
case condition1:
|
||||||
...
|
...
|
||||||
@@ -90,7 +90,7 @@ switch {
|
|||||||
|
|
||||||
例如:
|
例如:
|
||||||
|
|
||||||
```
|
```go
|
||||||
switch {
|
switch {
|
||||||
case i < 0:
|
case i < 0:
|
||||||
f1()
|
f1()
|
||||||
@@ -103,9 +103,9 @@ switch {
|
|||||||
|
|
||||||
任何支持进行相等判断的类型都可以作为测试表达式的条件,包括 int、string、指针等。
|
任何支持进行相等判断的类型都可以作为测试表达式的条件,包括 int、string、指针等。
|
||||||
|
|
||||||
Listing 5.4 [switch2.go](examples/chapter_5/switch2.go):
|
示例 5.4 [switch2.go](examples/chapter_5/switch2.go):
|
||||||
|
|
||||||
```
|
```go
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import "fmt"
|
import "fmt"
|
||||||
@@ -130,7 +130,7 @@ func main() {
|
|||||||
|
|
||||||
switch 语句的第三种形式是包含一个初始化语句:
|
switch 语句的第三种形式是包含一个初始化语句:
|
||||||
|
|
||||||
```
|
```go
|
||||||
switch initialization {
|
switch initialization {
|
||||||
case val1:
|
case val1:
|
||||||
...
|
...
|
||||||
@@ -143,7 +143,7 @@ switch initialization {
|
|||||||
|
|
||||||
这种形式可以非常优雅地进行条件判断:
|
这种形式可以非常优雅地进行条件判断:
|
||||||
|
|
||||||
```
|
```go
|
||||||
switch result := calculate(); {
|
switch result := calculate(); {
|
||||||
case result < 0:
|
case result < 0:
|
||||||
...
|
...
|
||||||
@@ -156,7 +156,7 @@ switch result := calculate(); {
|
|||||||
|
|
||||||
在下面这个代码片段中,变量 a 和 b 被平行初始化,然后作为判断条件:
|
在下面这个代码片段中,变量 a 和 b 被平行初始化,然后作为判断条件:
|
||||||
|
|
||||||
```
|
```go
|
||||||
switch a, b := x[i], y[j]; {
|
switch a, b := x[i], y[j]; {
|
||||||
case a < b: t = -1
|
case a < b: t = -1
|
||||||
case a == b: t = 0
|
case a == b: t = 0
|
||||||
@@ -170,7 +170,7 @@ switch 语句还可以被用于 type-switch(详见第 11.4 节)来判断某
|
|||||||
|
|
||||||
请说出下面代码片段输出的结果:
|
请说出下面代码片段输出的结果:
|
||||||
|
|
||||||
```
|
```go
|
||||||
k := 6
|
k := 6
|
||||||
switch k {
|
switch k {
|
||||||
case 4: fmt.Println("was <= 4"); fallthrough;
|
case 4: fmt.Println("was <= 4"); fallthrough;
|
||||||
|
Reference in New Issue
Block a user