Go 循环语句
2024年7月10日...大约 3 分钟
for 循环
for 循环是一个循环控制结构,可以执行指定次数的循环
语法:
for init; condition; post { }
for condition { }
for { }
- init:一般为赋值表达式,给控制变量赋初值
- condition:关系表达式或逻辑表达式,循环控制条件
- post:一般为赋值表达式,给控制变量增量或减量
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range oldMap {
newMap[key] = value
}
以上代码中的 key 和 value 是可以省略的
如果只想读取 key,格式如下:
for key := range oldMap
或者这样:
for key, _ := range oldMap
如果只想读取 value,格式如下:
for _, value := range oldMap
循环嵌套
语法:
for [condition | ( init; condition; increment ) | Range]
{
for [condition | ( init; condition; increment ) | Range]
{
statement(s);
}
statement(s);
}
循环控制语句
循环控制语句可以控制循环体内语句的执行过程
break
break 语句用于终止当前循环或者 switch 语句的执行,并跳出该循环或者 switch 语句的代码块
break 语句可以用于以下几个方面:
- 用于循环语句中跳出循环,并开始执行循环之后的语句
- break 在 switch 语句中在执行一条 case 后跳出语句的作用
- break 可应用在 select 语句中
- 在多重循环中,可以用标号 label 标出想 break 的循环
语法:
break
例:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
break // 当 i 等于 5 时跳出循环
}
fmt.Println(i)
}
}
package main
import "fmt"
func main() {
// 不使用标记
fmt.Println("---- break ----")
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
break
}
}
// 使用标记
fmt.Println("---- break label ----")
re:
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
break re
}
}
}
continue
Go 的 continue 语句有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句
for 循环中,执行 continue 语句会触发 for 增量语句的执行。
在多重循环中,可以用标号 label 标出想 continue 的循环。
语法:
continue
实例:
package main
import "fmt"
func main() {
// 不使用标记
fmt.Println("---- continue ---- ")
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
continue
}
}
// 使用标记
fmt.Println("---- continue label ----")
re:
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
continue re
}
}
}
goto
Go 的 goto 语句可以无条件地转移到过程中指定的行
goto 语句通常与条件语句配合使用。可用来实现条件转移,构成循环,跳出循环体等功能
语法:
goto label
..
.
label: statement
实例:
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 10
/* 循环 */
LOOP: for a < 20 {
if a == 15 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
}
Powered by Waline v3.3.2