Go 流程控制
程序员文章站
2022-06-24 20:02:05
...
Go流程控制
Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码,降低重复代码而生的结构,属于扩展类的流程控制。
一:if else(分支结构)
package main
import "fmt"
func main() {
age := 36
// 单个条件判断
// if后边跟一个表达式,表达式返回的必须为一个布尔值
// if age > 18 { // 满足条件执行的代码
// fmt.Println("你可以去网吧了")
// }else{ // 不满足条件执行的代码
// fmt.Println("赶紧回家写作业")
// }
// 多个条件判断
if age > 35 { // 满足条件执行的代码
fmt.Println("你的头秃了吗")
}else if age > 18 { // 不满足条件执行的代码
fmt.Println("你可以去网吧了")
}else {
fmt.Println("赶紧回家写作业")
}
}
特殊写法
package main
import "fmt"
func main() {
// 作用域
// age的变量此时只在if条件的判读语句中生效,
if age := 19; age > 18 {
fmt.Println("可以去网吧了")
} else {
fmt.Println("该写暑假作业了")
}
}
二:for(循环结构)
Go语言中的所有循环类型可以使用for关键字来完成
条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环
for循环基本格式:
-
for 初始语句;条件表达式;结束语句{
循环体语句
}
基本循环(常用方式)
在for循环中定义初始变量,初始变量的作用域仅限于此个for循环中
package main
import "fmt"
func main() {
// 基本格式
for i := 0; i < 10; i++{
fmt.Println(i)
}
}
省略开头的循环方式
在for循环的外面定义初始变量,初始变量可在函数内部使用
package main
import "fmt"
func main() {
// 省略初始语句
i := 5
for ; i<10; i++{
fmt.Println(i)
}
}
省略开头结尾的循环
初始变量放在for循环外,结束语句放在for循环末尾
package main
import "fmt"
func main() {
// 省略开头,结尾语句
i := 5
for i < 10 {
fmt.Println(i)
i++
}
}
无限循环
package main
import "fmt"
func main() {
// 无限循环
for {
fmt.Println("0")
}
}
for range(键值循环)
Go语言中可以使用for range 遍历数组、切片、字符串、map、及通道(channel)。通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值
- map返回键和值
- 通道(channel)只返回通道内的值
package main
import "fmt"
func main() {
# for range 循环
w := "hello 北京"
# 若只用一个变量接受则会返回索引,如果只想返回值则可以使用"_"来代替索引变量
for i, v := range w {
fmt.Printf("%d:%c\n",i,v)
}
}
练习:九九乘法表
package main
import "fmt"
func main() {
// 九九乘法表练习
for col := 1; col < 10; col++ {
for row := 1; row < col+1; row++ {
fmt.Printf("%dx%d=%d ",row,col,row*col)
}
fmt.Println()
}
}
跳出for循环
利用break跳出for循环,遇到break时终止循环
package main
import "fmt"
func main() {
// 当i=5时跳出for循环
for i := 0; i < 10; i++ {
if i == 5 {
break // 跳出for循环
}
fmt.Println(i)
}
}
跳过for循环
利用continue跳过for循环,遇到continue时不执行下面的操作,直接跳到下一次循环
package main
import "fmt"
func main() {
// 当i=5时跳过这次for循环
for i := 0; i < 10; i++{
if i == 5 {
continue // 跳过for循环
}
fmt.Println(i)
}
}
三:switch
可简化大量判断(一个变量和一个具体的值做比较),当找到第一个满足的case时,代码不会继续向下执行
package main
import "fmt"
func main() {
n := 3
switch n {
case 1:
fmt.Println("第一种情况")
case 2:
fmt.Println("第二种情况")
case 3:
fmt.Println("第三种情况")
default:
fmt.Println("第四种情况")
}
}
switch_case赋多个值
变量的赋值也可在switch中进行,但只能在这个switch中生效
package main
import "fmt"
func main() {
switch n := 3; n{
case 1,3,5,7:
fmt.Println("奇数")
case 2,4,6,8:
fmt.Println("偶数")
}
}
switch_case赋比较语句
package main
import "fmt"
func main() {
switch age := 23; {
case age > 18:
fmt.Println("已成年")
case age < 18:
fmt.Println("未成年")
}
}
四:goto
用来跳转到指定的标签
当执行goto语句后,会从goto下面的语句开始执行
package main
import "fmt"
func main() {
// goto + label实现跳出多层for循环
for i := 0; i < 10; i++ {
for j := 'A'; j < 'Z'; j++ {
if j == 'F' {
fmt.Printf("%v\n",j)
goto xx // 跳到指定标签
}
fmt.Printf("%v\n",j)
}
}
xx: // 标签
fmt.Println("over")
}