流程控制是每一种编程语言不可缺少的重要组成部分,它能够控制代码的逻辑走向及执行次序。
GO语言中常用的流程控制有 if
和 for
,switch
和goto
是为了简化代码而生的一种扩展类型的流程控制。
if else(分支结构)
if条件基本写法
语法格式如下:
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else {
分支3
}
说明:当表达1的结果为 true
时,执行分支1,否则执行表达式2,如果满足则执行分支2,否则执行分支3。
GO语言规定与 if
匹配的左括号 {
必须与 if和表达式
放在同一行,否则会报错的哦。同理,与 else
匹配的 {
也必须与 else
写在一行,else
也必须与上一个 if
或 else if
右边的大括号在同一行。
来个小示例吧:
func ifDemo1() {
age := 12
if age > 60 {
fmt.Println("老年人")
} else if age >= 18 {
fmt.Println("青壮年")
} else {
fmt.Println("未成年")
}
// 输出 未成年
}
if条件特殊写法
还有一种特殊的写法,先添加一个执行语句,再根据变量值进行判断,如下:
func ifDemo2() {
if age := 22; age > 60 {
fmt.Println("老年人")
} else if age >= 18 {
fmt.Println("青壮年")
} else {
fmt.Println("未成年")
}
// 输出 青壮年,注意:此时的age变量只在if条件语句中生效
}
for(循环结构)
GO语言中的所有循环类型均可以使用 for
关键字来完成。
语法格式:
for 初始语句; 条件表达式; 结束语句 {
循环体语句
}
来个九九乘法表小示例:
package main
import "fmt"
func main() {
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d * %d = %d \t", j, i, i*j)
}
fmt.Println()
}
}
无限循环
for {
循环体语句
}
for
循环可以通过 break
、goto
、return
、panic
语句强制退出循环。
for range
GO语言中可以使用 for range
遍历数组、切片、字符串、map及通道(channel)类型,它的返回值有以下规律:
- 数组、切片、字符串返回索引和值
- map返回键和值
- 通道(channel)只返回通道内的值。
switch case
switch
语句可方便地对大量的值进行条件判断,可以当作是 if else
的一种简写方式:
比如:
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:
fmt.Println("无效的输入!")
}
// 输出 中指
}
拓展:
- GO语言switch和PHP中的不同,不需要使用break跳出。
- 一个分支有多个值时,可以使用英文逗号分隔。
- 分支还可以使用表达,此时
switch
语句后不需要跟判断变量。 - 只能有一个
default
分支,这个就不用多说了吧~
goto(跳转到指定标签)
goto
语句通过标签进行代码间的无条件跳转。示例如下:
func gotoDemo() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
// 设置退出标签
goto breakTag
}
fmt.Printf("%v-%v\n", i, j)
}
}
return
// 标签
breakTag:
fmt.Println("结束for循环")
}
还有 break(跳出循环)、continue(继续下次循环)没什么特别之处在这里就不多说了。