流程控制
分支结构
if else判断语句
当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行分支2,都不满足时,则执行分支3。
Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else匹配的{也必须与else写在同一行,else也必须与上一个if或else if右边的大括号在同一行。
package main import "fmt" func main(){ var score int8 = 60 if score>=90{ fmt.Println("优秀") }else if score>=80{ fmt.Println("良好") }else if score>=60{ fmt.Println("及格") }else{ fmt.Println("不及格") } }
package main import "fmt" func main(){ //if条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断 //在这个示例中,score变量只在当前的if else语句块中生效 if score:= 60;score>=90{ fmt.Println("优秀") }else if score>=80{ fmt.Println("良好") }else if score>=60{ fmt.Println("及格") }else{ fmt.Println("不及格") } }
switch语句
在多条件情况下,switch的效率是高于if的,因此使用switch语句可方便地对大量的值进行条件判断。
go tool compile -S main.go >> main.s #查看go的汇编语言
package main import "fmt" func main(){ finger := 3 switch finger { case 1: fmt.Println("大拇指") case 2: fmt.Println("食指") case 3: fmt.Println("中指") case 4: fmt.Println("无名指") case 5: fmt.Println("小拇指") default: // Go语言规定每个switch只能有一个default分支。 fmt.Println("输入无效") } }
package main import "fmt" func main(){ switch finger := 3; finger { case 1: fmt.Println("大拇指") case 2: fmt.Println("食指") case 3: fmt.Println("中指") case 4: fmt.Println("无名指") case 5: fmt.Println("小拇指") default: // Go语言规定每个switch只能有一个default分支。 fmt.Println("输入无效") } }
package main import "fmt" func main(){ finger := 3 switch finger { case 1,3,5,7,9: fmt.Println("基数") case 2,4,6,8,10: fmt.Println("偶数") default: fmt.Println("输入无效") } }
package main import "fmt" func main(){ n := 3 switch { // 不需要跟判断的变量 case n%2 == 1: fmt.Println("基数") case n%2 == 0: fmt.Println("偶数") default: fmt.Println("输入无效") } }
package main import "fmt" func main(){ s := "a" switch { case s == "a": fmt.Println("a") fallthrough // 可以执行满足条件的case的下一个case case s == "b": fmt.Println("b") fallthrough // 可以执行满足条件的case的下一个case case s == "c": fmt.Println("c") case s == "d": fmt.Println("c") default: fmt.Println("...") } } /* 结果: a b c */
循环结构 for
在go语言中,所有的循环类型均可以使用for来完成。
for基本循环
package main import "fmt" func main(){ for n :=0;n<10;n++{ //起始值;判断条件;循环条件 fmt.Println(n) } }
package main import "fmt" func main(){ n :=0 for ;n<10;n++{ //起始值可以忽略,但是分号;必须要写 fmt.Println(n) } }
package main import "fmt" func main(){ n :=0 for n<10{ fmt.Println(n) n++ } }
package main import "fmt" func main(){ n :=0 for{ //不要执行,会停不下来导致程序卡住 fmt.Println(n) } }
for range
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
package main import "fmt" func main(){ n := [5]int{10,5,9,2,4} for i := range n{ fmt.Println(i) // i表示索引 } for i,j := range n{ fmt.Println(i,j) //i表示索引,j表示数组中的值 } }
跳出循环
break语句
默认情况下,for循环会一直执行到for循环条件不成立,break可以在循环中结束for语句
package main import "fmt" func main(){ n := [5]int{10,5,9,2,4} for _,j := range n{ fmt.Println(j) if j==9{ break } } }
continue语句
continue可以结束当前循环,继续开始下一次循环迭代过程。
package main import "fmt" func main(){ n := [5]int{10,5,9,2,4} for _,j := range n{ if j==9{ continue } fmt.Println(j) } }
标签转移语句
goto label
goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。
Go语言中使用goto语句能简化一些代码的实现过程。
package main import "fmt" func main(){ for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { goto breakTag // 设置退出标签 } fmt.Printf("%v-%v\n", i, j) } } breakTag: // 定义标签 fmt.Println("结束for循环") }
break label
package main import "fmt" func main(){ breakT: for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { break breakT // 设置退出标签 } fmt.Printf("%v-%v\n", i, j) } } fmt.Println("end") } /* 结果: 0-0 0-1 end */
continue label
package main import "fmt" func main(){ continueT: for i := 0; i < 5; i++ { for j := 0; j < 5; j++ { if j == 2 { continue continueT // 设置退出标签 } fmt.Printf("%v-%v\n", i, j) } } fmt.Println("end") }
0-0 0-1 1-0 1-1 2-0 2-1 3-0 3-1 4-0 4-1 end
练一练
package main import "fmt" func main(){ for i:=1;i<10;i++{ for j:=1;j<10;j++{ fmt.Printf("%d*%d=%2d ",j,i,i*j) if i==j{ fmt.Println("") break } } } }

浙公网安备 33010602011771号