GoLang 中的循环语句只有
for
循环,没有像 C 语言中那样的while
、do ...while
循环,但是可以改变写法实现do ...while
循环。
GoLang 循环语句的语法:
// 和 C 语言的 for 一样
for init; condition; post {
// ....
}
- init: 一般为赋值表达式,给控制变量赋初值;
- condition: 关系表达式或逻辑表达式,循环控制条件;
- post: 一般为赋值表达式,给控制变量增量或减量。
for 语句执行过程如下:
1. 执行 init 赋值表达式.
2. 检查控制变量是否满足 condition 的条件,若其值为 true ,则执行循环体内语句,然后执行 post,进入下一次循环,再检查 condition ,若 condition 的值为假,则结束循环。
实现 C 语言中的 do ...while
循环:
for condition {
// ....
}
这种写法在 for
后面只需写 condition 即可。
实现 C 语言中的 for( ; ; )
循环:
for {
// ....
}
这是死循环,若想结束循环,必须在循环体里面写上流程控制代码段,类似于递归函数中的递归头。
GoLang 中 for 循环还可以对 切片、集合、数组、字符串等进行迭代循环,即 range 格式:
// 复制 Map
for key, value := range oldMap {
newMap[key] = value
}
循环控制
循环控制语句可以控制循环体内语句的执行过程,GoLang 支持以下几种循环控制语句:
控制语句 | 描述 |
---|---|
break | 经常用于中断当前 for 循环或跳出 switch 语句。 |
continue | 跳过当前循环的剩余语句,然后继续进行下一轮循环。 |
goto | 将控制转移到被标记的语句。 |
break 与 continue
break 与 continue 的用法一样,但作用不一样:
package main
import "fmt"
func main() {
// 输出10以内所有奇数
num := 10
i := 0
for {
i += 1
if i%2 == 1 {
fmt.Print(i, " : ")
} else {
continue // 如果没有 continue 语句,无论 i 是不是奇数, i 都会说他是奇数
}
fmt.Println("\"啦啦啦~ 我是奇数~\"")
if i >= num - 1 {
break // 如果没有 break 语句,循环体会一直执行,不断输出奇数
}
}
}
运行结果为:
1 : "啦啦啦~ 我是奇数~"
3 : "啦啦啦~ 我是奇数~"
5 : "啦啦啦~ 我是奇数~"
7 : "啦啦啦~ 我是奇数~"
9 : "啦啦啦~ 我是奇数~"
goto
goto 语句可以无条件地转移到过程中指定的行,通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出循环体等功能,类似于汇编语言中的 jmp 指令。但是在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
goto 语法格式如下:
goto label;
..
label: statement;
如:
package main
import "fmt"
func main() {
// 在变量 a 等于 15 的时候跳过本次循环并回到循环的开始语句 LOOP 处
var a int = 10
LOOP: for a < 20 {
if a == 15 {
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
}
执行结果为:
a的值为 : 10
a的值为 : 11
a的值为 : 12
a的值为 : 13
a的值为 : 14
a的值为 : 16
a的值为 : 17
a的值为 : 18
a的值为 : 19
以上内容均源于网络,并加上自己的实践和理解,如有错误的地方,请在评论区指正。
有疑问加站长微信联系(非本文作者)