前言
流程控制顾名思义就是 控制程序执行流程的语句 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( "结束了" ) } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南