Go基础—3.流程控制
一、Go条件控制语句
if条件语句
语法:
if 条件1{
执行代码1
} else if 条件2{
执行代码2
} else {
执行代码3
}
如果满足条件1则执行代码1,不满足条件1则判断是否满足条件2,满足则执行代码2不满足则跳过执行代码3。
注意:关键字 if 和 else 之后的左大括号 { 必须和关键字在同一行。
if语句例子如下:
package main
import "fmt"
func main() {
var a int = 68
if a < 60 {
fmt.Printf("你的成绩等级为: 不及格")
} else if 60 <= a && a <= 90 {
fmt.Printf("你的成绩等级为: 良好")
} else {
fmt.Printf("你的成绩等级为: 优秀")
}
}
/* 运行结果如下
你的成绩等级为: 良好
*/
switch语句
对比每个case后面的变量值,找出和变量相同或者条件符合的分支执行代码,都没有匹配的话则执行default关键字后面的代码。
语法:
switch 变量 {
case 变量值1:
执行代码1
case 变量值2:
执行代码2
default:
执行代码3
}
switch语句例子如下:
package main
import "fmt"
func main() {
var str string = "orange"
switch str {
case "apple":
fmt.Printf("苹果")
case "banana":
fmt.Printf("香蕉")
case "orange":
fmt.Printf("橙子")
case "watermelon":
fmt.Printf("西瓜")
default:
fmt.Printf("没有你要找的水果!")
}
}
/* 运行结果如下
橙子
*/
switch的分支中也可以加入条件判断的方式,例子如下:
package main
import "fmt"
func main() {
var num int = 97
switch {
case num < 60:
fmt.Printf("你的成绩等级为: 不及格")
case num <= 90 && num >= 60:
fmt.Printf("你的成绩等级为: 良好")
default:
fmt.Printf("你的成绩等级为: 优秀")
}
}
/* 运行结果如下
你的成绩等级为: 优秀
*/
二、Go循环语句
for循环语句
语法:
for 循环条件 {
执行代码
}
如果需要无限循环:
for {
执行代码
}
循环示例
10以内的循环输出a的值,示例如下:
for a := 0; a < 10; a++ {
fmt.Println(a)
}
使用for循环打印出九九乘法表。
【示例】代码如下所示:
package main
import "fmt"
func main() {
for i := 1; i <= 9; i++ {
// 遍历, 决定这一行有多少列,列数跟i的值一样
for j := 1; j <= i; j++ {
// 如果结果少于两位数则多输出一个空格,保证输出整齐
if i*j < 10 && j != 1 {
fmt.Printf("%dx%d=%d ", j, i, i*j)
} else {
fmt.Printf("%dx%d=%d ", j, i, i*j)
}
}
//输出完每一行自动换行
fmt.Printf("\n")
}
}
/* 运行结果如下
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
*/
break语句
break 语句可以结束 for、switch 和 select 的代码块
当i的值大于5时结束循环。
【示例】代码如下所示:
package main
import "fmt"
func main() {
var i int = 0
for {
i++
if i > 5 {
fmt.Printf("i的值大于5,跳出循环")
break
}
}
}
continue语句
continue 语句可以结束当前循环,开始下一次的循环迭代过程。
使用continue 语句找出100以内能被3整除的数。
【示例】代码如下所示:
package main
import "fmt"
func main() {
fmt.Println("100 以内能被 3 整除的数:")
for i := 1; i < 100; i++ {
if i%3 != 0 {
continue // 如果不能被 3 整除,跳过当前循环
}
fmt.Println(i)
}
}
goto语句
goto 语句通过标签进行代码间的无条件跳转,可以一次性跳出多层循环。
以下是使用break跳出多层循环的示例。
【示例】代码如下所示:
package main
import "fmt"
func main() {
var breakAgain bool
// 第一层循环
for i := 0; i < 10; i++ {
// 第二层循环
for j := 0; j < 10; j++ {
// 满足某个条件时, 退出循环
if j == 2 {
// 设置退出标记
breakAgain = true
// 退出本次循环
break
}
fmt.Println("i = ", i, ",", "j = ", j)
}
// 根据标记, 还需要退出一次循环
if breakAgain {
break
}
}
fmt.Println("done")
}
/* 运行结果如下
i = 0 , j = 0
i = 0 , j = 1
done
*/
使用goto进行优化,示例如下:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
// 跳转到定义的跳出位置标签
goto breakHere
}
fmt.Println("i = ", i, ",", "j = ", j)
}
}
// 手动返回, 避免执行进入标签
return
// 定义跳出位置标签
breakHere:
fmt.Println("done")
}
/* 运行结果如下
i = 0 , j = 0
i = 0 , j = 1
done
*/