条件语句
条件语句需要开发者通过指定一个或多个条件,并通过检查条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况下执行另外的语句
If 语句
if 布尔表达式 {
// 在布尔表达式为 true 时执行
...
}
if 布尔表达式 {
// 在布尔表达式为 true 时执行
...
} else {
// 在布尔表达式为 false 时执行
...
}
if 布尔表达式 1 {
// 在 布尔表达式 1 为 true 时执行
...
if 布尔表达式 2 {
// 在 布尔表达式 2 为 true 时执行
...
}
}
switch 语句
switch 语句基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上到下逐一检查,直到匹配为止
switch 默认情况下 case 最后自带 break 语句,不用再加 break,匹配成功后就不会再执行其他 case
如果需要强制执行匹配成功后下面的 case 语句,可以使用 fallthrough
switch v_name {
case val1 :
...
case val2, val3 :
...
default :
...
}
switch {
case v_name == val1 :
...
case v_name == val2, v_name == val3 :
...
default :
...
}
使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true
switch v_name {
case val1 :
...
case val2, val3 :
...
if (...) {
Break
}
fallthrough // 此时 case val4 的语句会被强制执行;如果 if 语句返回 true,则不强制执行 case val4
case val4 :
...
default :
...
}
Select 语句
select 语句是 Go 中的一个控制结构,类似于用于 通信 的 switch 语句
每一个 case 都必须是一个 通信操作,要么是 发送,要么是 接收
所有的 channel 表达式都会被求值
所有被发送的表达式都会被求值
如果任意某个通信可以进行,它就执行,其他被忽略
如果有多个 case 都可以运行,select 会随机地选择一个执行,其他的不会执行
如果没有 case 可以运行: 如果有 default 语句,则执行该语句 如果没有 default 语句,select 将阻塞,直到某个通信可以运行;Go 不会重新对 channel 或值进行求值
select {
case communication clause : // 通信条款
statement(s); // 声明
case communication clause :
statement(s);
default : // 可选
statement(s);
}
package main
import (
"fmt"
"time"
)
func ChanTran (ch chan int, stopCh chan bool) {
i := 10
for j := 0; j < 10; j++ {
ch <- i
time.Sleep(time.Second)
}
stopCh <- true
}
func main () {
ch := make (chan int)
stopCh := make (chan int)
c := 0
Go ChanTran(ch, stopCh)
for {
select {
case c = <-ch :
fmt.Println ("Recvice", c, 1)
case s := <-ch :
fmt.Println ("Recvice", s, 2)
case _ = <-stopCh :
goto end
}
}
end:
}