Go基础—3.流程控制

TOC

一、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
*/