2.7 流程控制
if
用法:
if condition {
// do something
}
if condition {
// do something
} else {
// do something
}
if condition1 {
// do something
} else if condition2 {
// do something else
}else {
// catch-all or default
}
switch
相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。它接受任意形式的表达式:
switch var1 {
case val1:
...
case val2:
...
default:
...
}
for
for 初始化语句; 条件语句; 修饰语句 {}
示例:
for i := 0; i < 5; i++ {
fmt.Printf("This is the %d iteration\n", i)
}
for-range
这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合,语法上很类似其它语言中 foreach 语句。
for pos, char := range str {
...
}
示例:
var a = [10]int{1,2,3,4,5,6,7,8,9,0}
for _, e := range a { fmt.Println(e) }
Break 与 continue
break退出循环, continue调到下一个循环
for i:=0; i<3; i++ {
for j:=0; j<10; j++ {
if j>5 {
break
}
print(j)
}
print(" ")
}
结果:
012345 012345 012345
for i := 0; i < 10; i++ {
if i == 5 {
continue
}
print(i)
print(" ")
}
label
Go语言也支持label(标签)语法:分别是break labe、 goto label和continuelabel。
package main
import "fmt"
func main() {
Loop:
for i := 0; i < 10; i++ {
fmt.Println("label i is ", i)
for j := 0; j < 10; j++ {
if j > 5 {
//跳到外面去啦,但是不会再进来这个for循环了
break Loop
}
}
}
//跳转语句 goto语句可以跳转到本函数内的某个标签
gotoCount := 0
GotoLabel:
gotoCount++
if gotoCount < 10 {
goto GotoLabel //如果小于10的话就跳转到GotoLabel
}
fmt.Println(gotoCount)
Clabel:
for a < 20 {
if a == 15 {
a++
continue Clabel
}
fmt.Println(a)
a++
}
}
}
输出:
label i is 0 10 10 11 12 13 14 16 17 18 19