流程控制-if、for、break
目录
流程控制
Go语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
-
顺序结构:程序按顺序执行,不发生跳转。
-
选择结构:依据是否满足条件,有选择的执行相应功能。
-
循环结构:依据条件是否满足,循环多次执行某段代码。
if语句
if
var a int=3
if a == 3{//条件表达式没有括号
fmt.Println("a==3")
}
//支持一个初始化表达式,初始化字句和条件表达式直接需要用分号分隔
if b:= 3;b == 3{
fmt.Println("b==3")
}
if ... else
if a:=3; a==4{
fmt.Println("a==4")
}else{
//左大括号必须和条件语句或else在同一行
fmt.Println("a!=4")
}
if ... else if ... else
if a:=3; a>3 {
fmt.Println("a>3")
} else if a<3 {
fmt.Println("a<3")
} else if a==3 {
fmt.Println("a==3")
} else {
fmt.Println("error")
}
switch语句
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch,但是可以使用fallthrough强制执行后面的case代码:
var score int = 90
switch score {
case 90:
fmt.Println("A")
//fallthrough
case 80:
fmt.Println("B")
//fallthrough
case 50,60,70:
fmt.Println("C")
//fallthrough
default:
fmt.Println("D")
}
可以使用任何类型或表达式作为条件语句:
//1
switch s1:=90 ; s1{//初始化语句;条件
case 90:
fmt.Println("A")
case 80:
fmt.Println("B")
default:
fmt.Println("C")
}
//2
var s2 int=90
switch{//这里没有写条件
case s2 >= 90://这里写判断语句
fmt.Println("A")
cases2 >= 80:
fmt.Println("B")
default:
fmt.Println("C")
}
//3
switch s3 := 90;{//只有初始化语句,没有条件
case s3 >= 90://这里写判断语句
fmt.Println("A")
case s3 >= 80:
fmt.Println("B")
default:
fmt.Println("C")
}
if-else与区别
if-else语句更适合于对区间(范围)的判断,而switch语句更适合于对离散值的判断
循环语句
普通for循环
var i,sum int
for i = 1; i <= 100; i++ {
sum+=i
}
fmt.Println("sum=",sum)
大神for循环
lis := make([]int,0)
for i:=0;i<100;i++{
lis = append(lis, i)
}
//普通for循环,每一次都要调用len(lis)
for i:=0;i<len(lis);i++ {
fmt.Println(lis[i])
}
//大神for循环,只调用一次len(lis)
for i,t:=0,len(lis); i<t;i++{
fmt.Println(lis[i])
}
range
关键字 range 会返回两个值,第一个返回值是元素的数组下标,第二个返回值是元素的值:
s := "abc"
for i := range s{//支持string/array/slice/map。
fmt.Printf("%c\n",s[i])
}
for _, c := range s{//忽略index
fmt.Printf("%c\n",c)
}
for i, c := range s{
fmt.Printf("%d,%c\n",i,c)
}
跳转语句
break和continue
在循环里面有两个关键操作break和continue,break操作是跳出当前循环,continue是跳过本次循环。
for i := 0; i < 5; i++ {
if 2 == i {
//break//break操作是跳出当前循环
continue//continue是跳过本次循环
}
fmt.Println(i)
}
注意:break可⽤于for、switch、select,⽽continue仅能⽤于for循环。
goto
用goto跳转到必须在当前函数内定义的标签:
func main() {
for i := 0; i < 5; i++{
for{
fmt.Println(i)
gotoLABEL//跳转到标签LABEL,从标签处,执行代码
}
}
fmt.Println("thisistest")
LABEL:
fmt.Println("itisover")
}
选择了IT,必定终身学习
posted @ Jeff的技术栈 阅读 (9999+) 评论 (99) 点赞(99) 编辑 MD 收藏
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!