前言
流程控制顾名思义就是 控制程序执行流程的语句 for循环、if else判断
一、if分支
package main import ( "fmt" ) //if 条件判断 func main() { age := 19 //if else 两个判断分支 if age > 18 { fmt.Println("澳门首家线上赌场开业啦") } else { fmt.Println("该写暑假作业了") } //多个判断分支 if age > 35 { fmt.Println("人到中年") } else if age > 18 || age < 100 { fmt.Println("青年") } else { fmt.Println("好好学习") } //多个判断条件 var name = "张根" if name == "张根" && age == 19 { fmt.Println("你永远18岁") } //for循环 for i := 0; i < 10; i++ { fmt.Println(i) } }
if 条件循环语句 声明变量
Go的if条件分支里也可以声明变量,但是该变量只能在 if分支的作用域使用,这样也起到了节省内存的作用。
package main import ( "fmt" ) //if 条件判断开辟作用域 func main() { if age := 19; age > 18 { fmt.Println("已经成年") } fmt.Println(age) //这里无法引用到age变量因为在if中声明的变量只能在if分支的作用域使用 }
switch语句
使用switch语句简化 多个if条件判断
package main import ( "fmt" ) //switch:简化大量的if分支 func main() { var n = 1 if n == 1 { fmt.Println("大拇指") } else if n == 2 { fmt.Println("食指") } else if n == 3 { fmt.Println("中指") } else if n == 4 { fmt.Println("无名指") } else if n == 5 { fmt.Println("小拇指") } else { fmt.Println("无效的输入") } //使用 switch简化以上代码 switch n = 3; n { case 1: fmt.Println("小拇指") case 2: fmt.Println("无名指") case 3: fmt.Println("中指") case 4: fmt.Println("事指") case 5: fmt.Println("大拇指") default: //默认分支 fmt.Println("无效的输入") } //switch 中判断 奇数 偶数 switch n := 8; n { case 1, 3, 5, 7, 9: fmt.Println("奇数") case 2, 4, 6, 8, 10: fmt.Println("偶数") default: fmt.Println("无效的数字") } //case 分支使用表示式 age := 19 switch { case age < 25: fmt.Println("好好学习") case age > 25 && age < 35: fmt.Println("好好工作吧") case age > 35 && age < 60: fmt.Println("好好享受生活把") default: fmt.Println("好好活着") } //fall through 下沉,语法执行满足1个case条件之后,再下沉1个case去判断(previouscase || next case) s := "a" switch { case s == "a": fmt.Println("a") fallthrough case s == "b": fmt.Println("b") } //既打印a 也打印 b }
二、for循环
在go语言中for循环有4种形式
1.for 什么也不加
死循环就是for后面没有声明变量、条件表达式、累计算操作。
for{ time.Sleep(time.Second*1)//等1秒再往下继续执行 }
2.for+条件表达式;
go的for循环是每次执行完{ }里面的代码块,又回到for 表达式的位置 {},判断这个表达式是否仍然成立。
果表达式仍然成立,继续进入for循环,否则退出for循环!
var number int8 for number < 10 { time.Sleep(time.Second * 1) //等1秒再往下继续执行 fmt.Println("红鲤鱼与绿鲤鱼与驴") number ++ }
3.for+声明变量;+条件表达式;
for循环开始时会声明1个变量i:=0;然后判断i<10;进入for循环代码块{}
执行完了for循环代码块{}中的内容,会回到i<10;再次判断,然后再次进入for循环代码块{}
这种方式简化了以上在for循环代码块{}里面声明变量并操作的步骤
注意这种方式声明的i,在for循环作用域外面是,获取不到的。
for i:=0;i<10;{ i++ fmt.Println("您好") }
4.for+声明变量;+条件表达式;+累计计算;
设置i的初始值为0,当i小于10时,每次循环i+1
for i:=10;i>0;i-=2{ fmt.Println("您好!") }
5.for循环设置标签
Go语言比较特殊的地方是我们可以对Go的for循环设置1个标签,然后在内层循环中使用continue、break 该标签,可以到达影响外层循环的效果。
f1: for i := 1; i < 3; i++ { for j := 1; j < 5; j++ { f j == 3 { continue f1 } fmt.Println(i, j) } } }
break指定循环
f1: //对外层for循环,进行标记。 for i := 1; i < 3; i++ { for j := 1; j < 5; j++ { if j == 3 { //使用标签break 外层循环 break f1 } fmt.Println(i, j) } }
6.goto语法
goto语句可以跳跃(go to)到指定的代码行,然后向下执行代码。
package main import "fmt" func main() { var name string fmt.Print("请输入用户名:") fmt.Scan(&name) if name == "VIP" { goto VIP //跳跃到VIP代码块,开始执行 } else if name == "SVIP" { goto SVIP //跳跃到SVIP代码块,开始执行 } else { //跳跃到Ordinary代码块,开始执行 goto Ordinary } Ordinary: fmt.Println("预约......") VIP: fmt.Println("等号........") SVIP: fmt.Println("进入........") }
三、for循环练习
package main import ( "fmt" ) func main() { //变种1 var i = 5 for ; i < 10; i++ { fmt.Println(i) } //变种2 for i := 7; i < 10; i++ { fmt.Println(i) } //变种3 var j = 9 for j < 10 { fmt.Println(i) j++ } }
for rang键值对循环
package main import ( "fmt" ) func main() { //键值对循环 for range var str1 = "张根" for i, v := range str1 { fmt.Printf("索引:%d 值:%c\n", i, v) } }
break 和 continue
package main import ( "fmt" ) func main() { //当i=5时跳出for循环 for i := 0; i < 10; i++ { if i == 5 { break //break跳出for循环 } fmt.Println(i) } //当i=5是忽略本次循环 for i := 0; i < 9; i++ { if i == 5 { continue } fmt.Println(i) } }
break and continue代码跳转
package main import ( "fmt" ) func ContinueDemo() { forloop1: for i := 0; i < 5; i++ { // forloop2: for j := 0; j < 5; j++ { if i == 2 && j == 2 { continue forloop1 } fmt.Printf("%v-%v\n", i, j) } } } func BreakDemo() { break1: for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { break break1 } fmt.Printf("%v-%v\n", i, j) } } fmt.Println("结束") } func main() { BreakDemo() ContinueDemo() }
Go打印乘法表
package main import ( "fmt" ) //打印乘法表 func main() { for i := 1; i < 10; i++ { for j := 1; j < i; j++ { fmt.Printf("%d*%d=%d\t", j, i, j*i) } fmt.Println() } }
Goto 跳出多层for循环
package main import ( "fmt" ) //跳出多层for循环 func main() { //设置标志位 var flag = false for i := 0; i < 10; i++ { for j := 'A'; j < 'Z'; j++ { if j == 'C' { flag = true break //跳出内层循环 } fmt.Printf("%v-%c\n", i, j) } if flag { break //跳出外层循环 } } //使用go to语句跳出多层for循环 for i1 := 0; i1 < 10; i1++ { for j1 := 'a'; j1 < 'z'; j1++ { if j1 == 'c' { goto lable1 //goto 直接跳到定义lable1的位置执行 } fmt.Printf("%v-%c\n", i1, j1) } } lable1: //定义1个 lable fmt.Println("结束了") }