在不少实际问题中,有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。以下为大多数编程语言循环程序的流程图:
Go语言的循环只有for一种表示方法,提供了以下两种循环处理语句:
循环类型 | 描述 |
---|---|
for循环 | 重复执行语句块 |
for嵌套循环 | 在for循环中嵌套一个或多个 for 循环 |
for循环可以通过break、goto、return、panic等语句强制退出循环。
1. for循环
for循环是一个循环控制结构,可以用来执行指定次数的循环。
1.1 for循环的语法
- go中for循环的一般形式(重要)
与C语言一样,go语言的循环只有一种形式,在for语句之间使用分号分隔。
for 初始语句; 条件表达式; 结束语句 {
循环体
}
循环体不停地进行循环,直到条件表达式返回false时,自动退出循环,接着执行for的“}”之后的语句。
- for中的初始语句 —— 开始循环时执行的语句
初始语句一般为赋值表达式,在第一次循环前执行,一般用于初始化控制变量。控制变量的作用域被限定在这个for循环之内。初始语句可以忽略不写,但初始语句之后的分号;必须写。
step := 2
for ;step > 0; step-- {
fmt.Println(step)
}
控制变量step放在for循环之前进行初始化,并且省略了初始化语句,此时控制变量step的作用域比在初始化语句中声明step的要大。
- for中的条件表达式 —— 控制是否循环的开关
条件表达式为关系表达式或逻辑表达式,是循环控制的判断条件。每次for循环开始前,计算条件表达式。如果值为true,则循环继续,否则循环结束。
a. 与C语言的for(;;)一样,下面代码忽略初始语句、条件表达式,但是保留结束语句。此时for循环持续执行(死循环),每次循环结束都会调用结束语句i++,循环的退出需要在循环体内调用break语句。
for ; ; i++ {
循环体
}
示例:当i大于10时,通过break语句跳出for循环,执行循环之外的语句。
var i int
for ; ; i++ {
// 没有设置i的初始值
if i > 10 {
break
}
// code block
}
// code block
b. 无限循环(死循环)
条件表达式可以被忽略,忽略条件表达式的for循环默认形成无限循环。无限循环在收发处理中较常见,但需要有可控的方式结束循环,如break语句。
for {
循环体
}
把i++从for结束语句位置放到函数体末尾是等效的,这样的代码更有可读性。
var i int // 全局变量声明,下方赋值
for {
if i > 10 {
break
}
// code block
i++
}
c. 只有一个条件的for循环(将if判断整合到for中)
for condition {
循环体
}
下面代码与C语言的while类似,在for后添加一个条件表达式,满足条件时持续循环,否则结束循环。
在代码第3行中,将之前使用if i > 10 {}
的判断表达式进行取反,变为判断i小于等于10时持续进行循环。
var i int // 全局变量