前言
流程控制顾名思义就是 控制程序执行流程的语句 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循环
for循环基本格式
设置i的初始值为0,当i小于10时,每次循环i+1
package main import ( "fmt" ) //for循环 func main() { //基本格式 //i的初始值为0,当i小于10时,每次循环i+1 for i := 0; i < 10; i++ { fmt.Println(i) } }
变种
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 ", 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 ", 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 ", 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 ", 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 ", 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 ", i1, j1) } } lable1: //定义1个 lable fmt.Println("结束了") }