集中常见的条件判断语句
语句 | 描述 |
---|---|
if 语句 | if 语句 由一个布尔表达式后紧跟一个或多个语句组成。 |
if...else 语句 | if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。 |
if 嵌套语句 | 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。 |
switch 语句 | switch 语句用于基于不同条件执行不同动作。 |
select 语句 | select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。 |
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
}
**与C语言等不同的是在if后面的布尔表达式没有括号
eg:
package main
import "fmt"
func main() {
var a int = 10
var b float32 = 10.1
if a < 20 {
fmt.Println("a 小于 20
")
}
fmt.Println("a,b的值为: %d,%f
", a, b)
}
switch语句语法:
switch var1 {
case val1:
...
case val2:
...
default:
...
}
select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。
select语句语法:
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定义任意数量的 case */
default : /* 可选 */
statement(s);
}
- 每个case都必须是一个通信
- 所有channel表达式都会被求值
- 所有被发送的表达式都会被求值
- 如果任意某个通信可以进行,它就执行;其他被忽略。
- 如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。
否则:- 如果有default子句,则执行该语句。
- 如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。
eg:
package main
import "fmt"
func main() {
var c1, c2, c3 chan int
var i1, i2 int
select {
case i1 = <-c1:
fmt.Printf("received", i1, "from c1
")
case c2 <- i2:
fmt.Printf("sent ", i2, "to c2
")
case i3, ok := (<-c3):
if ok {
fmt.Printf("received ", i3, "from c3
")
} else {
fmt.Printf("c3 is closed
")
}
default:
fmt.Printf("no communication
")
}
}
结果为:
no communication
循环语句:
循环类型 | 描述 |
---|---|
for 循环 | 重复执行语句块 |
循环嵌套 |
在 for 循环中嵌套一个或多个 for 循环 |
控制语句 | 描述 |
---|---|
break 语句 | 经常用于中断当前 for 循环或跳出 switch 语句 |
continue 语句 | 跳过当前循环的剩余语句,然后继续进行下一轮循环。 |
goto 语句 | 将控制转移到被标记的语句。 |
goto 语法格式如下:
goto label; .. . label: statement;
eg :
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 10
/* 循环 */
LOOP: for a < 20 {
if a == 15 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d
", a)
a++
}
}