4 流程控制
Go语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
4.1 选择结构
if 语句
if
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package main
import "fmt"
func main() { var a int = 3 if a == 3 { fmt.Println("a==3") }
if b := 3; b == 3 { fmt.Println("b==3") } }
|
if else
1 2 3 4 5
| if a := 3; a == 4 { fmt.Println("a==4") } else { fmt.Println("a!=4") }
|
if … else if … else
1 2 3 4 5 6 7 8 9
| if a := 3; a > 3 { fmt.Println("a>3") } else if a < 3 { fmt.Println("a<3") } else if a == 3 { fmt.Println("a==3") } else { fmt.Println("error") }
|
switch 语句
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var score int = 90
switch score { case 90: fmt.Println("优秀") case 80: fmt.Println("良好") case 50, 60, 70: fmt.Println("一般") default: fmt.Println("差") }
|
可以使用任何类型或表达式作为条件语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| switch s1 := 90; s1 { case 90: fmt.Println("优秀") case 80: fmt.Println("良好") default: fmt.Println("一般") }
var s2 int = 90 switch { case s2 >= 90: fmt.Println("优秀") case s2 >= 80: fmt.Println("良好") default: fmt.Println("一般") }
switch s3 := 90; { case s3 >= 90: fmt.Println("优秀") case s3 >= 80: fmt.Println("良好") default: fmt.Println("一般") }
|
4.2 循环语句
for
1 2 3 4 5 6
| var i, sum int
for i = 1; i <= 100; i++ { sum += i } fmt.Println("sum = ", sum)
|
range
关键字 range 会返回两个值,第一个返回值是元素的数组下标,第二个返回值是元素的值:
1 2 3 4 5 6 7 8 9 10 11 12
| s := "abc" for i := range s { fmt.Printf("%c\n", s[i]) }
for _, c := range s { fmt.Printf("%c\n", c) }
for i, c := range s { fmt.Printf("%d, %c\n", i, c) }
|
4.3 跳转语句
break和continue
在循环里面有两个关键操作break和continue,break操作是跳出当前循环,continue是跳过本次循环。
1 2 3 4 5 6 7
| for i := 0; i < 5; i++ { if 2 == i { continue } fmt.Println(i) }
|
注意:break可⽤于for、switch、select,⽽continue仅能⽤于for循环。
goto
用goto跳转到必须在当前函数内定义的标签:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package main
import "fmt"
func main() { for i := 0; i < 5; i++ { for { fmt.Println(i) goto LABEL } }
fmt.Println("this is test") LABEL: fmt.Println("it is over") }
|