Go学习之路 (三) 条件和循环
在go中,所有的循环都是for
package main
import(
"fmt"
"testing"
)
func TestFor(t *testing.T){
n :=0
for n < 5{
fmt.Printf("这是第%d次循环\n",n)
n++
}
}
--------------------第二种循环--------------------------
package main
import(
"fmt"
"testing"
)
func TestFor(t *testing.T){
for n :=0;n < 5;n++{
fmt.Printf("这是第%d次循环\n",n)
}
}
运行结果:
这是第0次循环
这是第1次循环
这是第2次循环
这是第3次循环
这是第4次循环
无限循环:
package main
import(
"fmt"
"testing"
)
func TestFor(t *testing.T){
for true{
fmt.Printf("这是无限循环\n")
}
}
运行结果:
这是无限循环
这是无限循环
这是无限循环
...
条件语句
| 语句 | 描述 |
|---|---|
| if 语句 | if 语句 由一个布尔表达式后紧跟一个或多个语句组成。 |
| if...else 语句 | if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。 |
| if 嵌套语句 | 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。 |
| switch 语句 | switch 语句用于基于不同条件执行不同动作。 |
| select 语句 | select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。 |
package main
import(
"fmt"
"testing"
)
func TestIf(t *testing.T){
for a :=0; a<5; a++{
if a ==1{
fmt.Printf("这是1\n")
}
else if a==2{
fmt.Printf("这是2\n")
}
else{
fmt.Printf("这是闲的\n")
}
}
}
输出结果:
这是闲的
这是1
这是2
这是闲的
这是闲的
这里还有一种在if中调用其他函数的
package main
import(
"fmt"
"testing"
)
func TestMultiSec(t *testing.T){
if v,err :=someFun(); err=nil { //如果err为空,则执行第一个
t.Log{"1==1"}
}else{ //如果err不为空则执行这一条
t.Log("1==1")
}
}
- nil这里是空,是Go中预留的变量,代表空
switch条件
与其他主要编程语言的差异
- 条件表达式不限制为常量或者整数
- 单个 case 中,可以出现多个结果选项,使用都好分隔;
- 与 C 语言等规则相反, Go 语言不需要 break 来明确退出一个 case;
- 可以不设定 switch 之后的条件表达式,在此种情况下,整个 switch 结构与多个 if...selse... 的逻辑作用等同
package main
import "testing"
func TestSwitchMultiCase(t *testing.T){
for i := 0; i < 5; i++ {
switch i {
case 0, 2:
t.Log("Even")
case 1, 3:
t.Log("odd")
default:
t.Log("it is not 0-3")
}
}
}
运行结果:
fib_test.go:93: Even
fib_test.go:95: odd
fib_test.go:93: Even
fib_test.go:95: odd
fib_test.go:97: it is not 0-3
package main
import "testing"
func TestSwitchMultiCase(t *testing.T){
for i := 0; i < 5; i++ {
switch {
case i%2==0:
t.Log("Even")
case i%2==1:
t.Log("odd")
default:
t.Log("unknow")
}
}
}
运行结果
fib_test.go:93: Even
fib_test.go:95: odd
fib_test.go:93: Even
fib_test.go:95: odd
fib_test.go:97: unknow
浙公网安备 33010602011771号