前言
流程控制顾名思义就是 控制程序执行流程的语句 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条件分支里也可以声明和初始化变量;

- 先执行英文分号(;)左边:sumAB(1, 2)函数,声明和初始化变量sumResult;
- 再执行英文分号(;)右边:sumResult <= 3, 对sumResult变量值进行判断判断;
但是该变量只能在 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("结束了")
}
浙公网安备 33010602011771号