当前位置: 首页 > news >正文

掌握 Go 语言中的循环结构:从基础到高级

一、if else(分支结构)

1、if 条件判断基本写法
package main
import ("fmt"
)
func main() {score := 65if score >= 90 {fmt.Println("A")} else if score > 75 {fmt.Println("B")} else {fmt.Println("C")}
}
2、if 条件判断特殊写法
  • if 条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断
package main
import "fmt"
func main() {//这里的 score 是局部作用域if score := 56; score >= 90 {fmt.Println("A")} else if score > 75 {fmt.Println("B")}else {fmt.Println("C")fmt.Println(score) // 只能在函数内部打印 score}// fmt.Println(score) //undefined: score
}

二、for(循环结构)

1、for 循环
1、普通 for 循环
package main
import "fmt"
func main() {// 打印: 0 ~ 9 的数字for i := 0; i < 10; i++ {fmt.Println(i)}
}
2、外部定义 i
package main
import "fmt"
func main() {i := 0for i < 10 {fmt.Println(i)i++}
}
3、省略初始语句
package main
import "fmt"
func main() {i := 0for ; i < 10; i++ {fmt.Println(i)}
}
2、打印 0-10 的所有偶数
package main
import "fmt"
func main() {// 0 2 4 6 8for i := 0; i < 10; i++ {if i%2 == 0 {fmt.Println(i)}}
}
3、嵌套循环
package main
import "fmt"
func main() {for i := 1; i <= 9; i++ {for j := 1; j <= i; j++ {fmt.Printf("%vx%v=%v \t", i, j, i*j)}fmt.Println()}
}
/*
1x1=1
2x1=2 	2x2=4
3x1=3 	3x2=6 	3x3=9
4x1=4 	4x2=8 	4x3=12 	4x4=16
5x1=5 	5x2=10 	5x3=15 	5x4=20 	5x5=25
6x1=6 	6x2=12 	6x3=18 	6x4=24 	6x5=30 	6x6=36
7x1=7 	7x2=14 	7x3=21 	7x4=28 	7x5=35 	7x6=42 	7x7=49
8x1=8 	8x2=16 	8x3=24 	8x4=32 	8x5=40 	8x6=48 	8x7=56 	8x8=64
9x1=9 	9x2=18 	9x3=27 	9x4=36 	9x5=45 	9x6=54 	9x7=63 	9x8=72 	9x9=81
*/
4、模拟 while 循环
  • Go 语言中是没有 while 语句的,我们可以通过 for 代替
package main
import "fmt"
func main() {k := 1for { // 这里也等价 for ; ; {if k <= 10 {fmt.Println("ok~~", k)} else {break   //break 就是跳出这个 for 循环}k++}
}
5、for range(键值循环)
package mainimport "fmt"func main() {str := "abc上海"for index,var := range str{fmt.Printf("索引:%d,值=%c \n",index, val)}
}
/*
索引=0, 值=a
索引=1, 值=b
索引=2, 值=c
索引=3, 值=上
索引=6, 值=海
*/

三、switch case

  • 使用 switch 语句可方便地对大量的值进行条件判断
1、case 一般用法
package main
import "fmt"
func main() {score := "B"switch score {case "A":fmt.Println("非常棒")case "B":fmt.Println("优秀")case "C":fmt.Println("及格")default:fmt.Println("不及格")}
}
2、case 语句多个值
package main
import "fmt"
func main() {n := 2switch n {case 1, 3, 5, 7, 9:fmt.Println("奇数")case 2, 4, 6, 8:fmt.Println("偶数")default:fmt.Println(n)}
}
3、fallthrough 语句
  • fallthrough 语法可以执行满足条件的 cast 的下一个 case,是为了兼容C 语言中的 case 设计
package main
import "fmt"
func main() {s := "a"switch {case s == "a":fmt.Println("a")fallthroughcase s == "b":fmt.Println("b")case s == "c":fmt.Println("c")default:fmt.Println("...")}
}
/*
a
b

四、break、continue、goto

1、break 跳出单循环
package main
import "fmt"
func main() {k := 1for { // 这里也等价 for ; ; {if k <= 10 {fmt.Println("ok~~", k)} else {break   //break 就是跳出这个 for 循环}k++}
}
2、跳出多重循环
  • 在多重循环中,可以用标号 label 标出想 break 的循环
package main
import "fmt"
func main() {lable2:for i := 0; i < 2; i++ {for j := 0; j < 10; j++ {if j == 2 {break lable2}fmt.Println("i j 的值:", i, "-", j)}}
}
/*
i j 的值: 0 - 0
i j 的值: 0 - 1*/
3、continue(继续下次循环)
package main
import "fmt"
func main() {for i := 0; i < 2; i++ {for j := 0; j < 4; j++ {if j == 2 {continue}fmt.Println("i j 的值", i, "-", j)}}
}
/*
i j 的值 0 - 0
i j 的值 0 - 1
i j 的值 0 - 3
i j 的值 1 - 0
i j 的值 1 - 1
i j 的值 1 - 3*/
4、goto(跳转到指定标签)
package main
import "fmt"
func main() {for i := 0; i < 10; i++ {for j := 0; j < 10; j++ {if j == 2 {goto breakTag  // // 设置退出标签}fmt.Printf("%v-%v\n", i, j)}}returnbreakTag:	// 标签fmt.Println("结束 for 循环")
}
/*
0-0
0-1
结束 for 循环*/

相关文章:

  • ESP32 LVGL Gui-Guider的移植
  • openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引
  • Python面向对象练习
  • php轻量级性能分析工具 xhprof
  • 场景实践 | 法大大落地业财一体化,优化流程结构
  • SpringBoot之整合JWT
  • 深度学习机器视觉车道线识别与检测 -自动驾驶 计算机竞赛
  • Vue框架学习笔记——列表渲染:v-for
  • canvas绘制小丑
  • 【Vue】使用 Vue CLI 脚手架创建 Vue 项目(使用命令行创建)
  • LeetCode | 104. 二叉树的最大深度
  • Java变量与常量:深入理解基础概念
  • spring mvc理解
  • 【Java 基础】19 多线程基础
  • 配置multipath.conf后linux主机重启异常处理
  • C# 免费离线人脸识别 2.0 Demo
  • ComponentOne 2017 V2版本正式发布
  • docker-consul
  • ES学习笔记(12)--Symbol
  • flask接收请求并推入栈
  • HomeBrew常规使用教程
  • Linux CTF 逆向入门
  • Mysql5.6主从复制
  • nfs客户端进程变D,延伸linux的lock
  • Selenium实战教程系列(二)---元素定位
  • Vue.js-Day01
  • Vue.js源码(2):初探List Rendering
  • 从零搭建Koa2 Server
  • 关于extract.autodesk.io的一些说明
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 实战|智能家居行业移动应用性能分析
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 异步
  • 正则表达式小结
  • Hibernate主键生成策略及选择
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #HarmonyOS:基础语法
  • $(selector).each()和$.each()的区别
  • (06)Hive——正则表达式
  • (07)Hive——窗口函数详解
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (zhuan) 一些RL的文献(及笔记)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (独孤九剑)--文件系统
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (力扣)循环队列的实现与详解(C语言)
  • (一)基于IDEA的JAVA基础1
  • ../depcomp: line 571: exec: g++: not found
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args