ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、if ![](https://img.kancloud.cn/c6/11/c611864bb43072d693ed547c67295681_418x380.png) #### 实例 ~~~ package main import "fmt" func main() { /* 定义局部变量 */ var a int = 100 /* 使用 if 语句判断布尔表达式 */ if a < 200 { /* 如果条件为 true 则执行以下语句 */ fmt.Printf("a 的值小于 200\n") } fmt.Printf("a 的值为 : %d\n", a) } ~~~ 执行结果: a 小于 200 a 的值为 : 100 ## 二、if...else ![](https://img.kancloud.cn/ed/c4/edc4ea519ea3b39a9154813a96331bf1_363x380.png) #### 实例: ~~~ package main import "fmt" func main() { /* 局部变量定义 */ var a int = 100 /* 判断布尔表达式 */ if a < 20 { /* 如果条件为 true 则执行以下语句 */ fmt.Printf("a 小于 20\n") } else { /* 如果条件为 false 则执行以下语句 */ fmt.Printf("a 大于 20\n") } fmt.Printf("a 的值为 : %d\n", a) } ~~~ 执行结果: a 大于 20 a 的值为 : 100 ## 三、switch ![](https://img.kancloud.cn/a2/3d/a23daded2adb1faf361d317f9de0cd6e_487x536.png) 语法: ~~~ switch var1 { case val1: ... case val2: ... default: ... } ~~~ #### 1、实例 ~~~ package main import "fmt" func main() { /* 定义局部变量 */ var grade string = "B" var marks int = 90 switch marks { case 90: grade = "A" case 80: grade = "B" case 50, 60, 70: grade = "C" default: grade = "D" } switch { case grade == "A": fmt.Printf("优秀!\n") case grade == "B", grade == "C": fmt.Printf("良好\n") case grade == "D": fmt.Printf("及格\n") case grade == "F": fmt.Printf("不及格\n") default: fmt.Printf("差\n") } fmt.Printf("你的等级是 %s\n", grade) } ~~~ 执行结果: 优秀! 你的等级是 A #### 2、Type Switch switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。 语法: ~~~ switch x.(type){ case type: statement(s); case type: statement(s); /* 你可以定义任意个数的case */ default: /* 可选 */ statement(s); } ~~~ ~~~ package main import "fmt" func main() { var x interface{} switch i := x.(type) { case nil: fmt.Printf(" x 的类型 :%T", i) case int: fmt.Printf("x 是 int 型") case float64: fmt.Printf("x 是 float64 型") case func(int) float64: fmt.Printf("x 是 func(int) 型") case bool, string: fmt.Printf("x 是 bool 或 string 型") default: fmt.Printf("未知型") } } ~~~ 执行结果: x 的类型 :<nil> #### 3、fallthrough 使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。 ~~~ package main import "fmt" func main() { switch { case false: fmt.Println("1、case 条件语句为 false") fallthrough case true: fmt.Println("2、case 条件语句为 true") fallthrough case false: fmt.Println("3、case 条件语句为 false") fallthrough case true: fmt.Println("4、case 条件语句为 true") case false: fmt.Println("5、case 条件语句为 false") fallthrough default: fmt.Println("6、默认 case") } } ~~~ 执行结果: 2、case 条件语句为 true 3、case 条件语句为 false 4、case 条件语句为 true ## 四、select 语句 select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收。 select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。 语法: ``` select{ casecommunication clause  :        statement(s); casecommunication clause  :        statement(s); /* 你可以定义任意数量的 case */ default:/* 可选 */        statement(s); } ``` * 每个 case 都必须是一个通信 * 所有 channel 表达式都会被求值 * 所有被发送的表达式都会被求值 * 如果任意某个通信可以进行,它就执行,其他被忽略。 * 如果有多个 case 都可以运行,Select 会随机公平地选出一个执行。其他不会执行。 否则: 1. 如果有 default 子句,则执行该语句。 2. 如果没有 default 子句,select 将阻塞,直到某个通信可以运行;Go 不会重新对 channel 或值进行求值。