Go|Go 循环语句

Go 循环语句
一、概述 在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。
循环程序的流程图:
Go|Go 循环语句
文章图片


Go 语言提供了以下几种类型循环处理语句:

循环类型 描述
for 循环 重复执行语句块
循环嵌套 循环中嵌套一个或多个 for 循环

1. 循环控制语句
循环控制语句可以控制循环体内语句的执行过程。
GO 语言支持以下几种循环控制语句:
控制语句 描述
break 语句 经常用于中断当前 for 循环或跳出 switch 语句
continue 语句 跳过当前循环的剩余语句,然后继续进行下一轮循环。
goto 语句 将控制转移到被标记的语句。

2. 无限循环
如果循环中条件语句永远不为 false 则会进行无限循环,我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环:
示例
package mainimport ( "fmt" "time" )func main() { i := 0 for true {//for后面true为可选,若不加,默认为true fmt.Printf("i: %v\n", i) i++ time.Sleep(time.Second) } }//输出结果如下 i: 0 i: 1 i: 2 i: 3 i: 4 i: 5 i: 6 i: 7 .... .... ....


二、Go 语言 for 循环
1. 语法
for 循环是一个循环控制结构,可以执行指定次数的循环
语法:
//Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号
//和 C 语言的 for 一样:
for init; condition; post { }//和 C 的 while 一样: for condition { }//和 C 的 for(; ; ) 一样: for { }

  • init: 一般为赋值表达式,给控制变量赋初值
  • condition: 关系表达式或逻辑表达式,循环控制条件
  • post:一般为赋值表达式,给控制变量增量或减量。

2. for语句执行过程
① 先对表达式 1 赋初值;
② 判别赋值表达式 init 是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。
格式如下:
for key, value := range oldMap { newMap[key] = value }


for 语句语法流程如下图所示:
Go|Go 循环语句
文章图片


3. 示例
计算 1 到 10 的数字之和
package mainimport "fmt"func main() { sum := 0 for i := 0; i <= 10; i++ { sum += i } fmt.Printf("sum: %v\n", sum) }//输出结果为: 55

-----------------------------------------------------------------------------------------------
//int 和 post 参数是可选的,我们可以直接省略他,类型while语句
package mainimport "fmt"func main() { sum := 0 i := 1 for i <= 10 { sum += i i++ } fmt.Printf("sum: %v\n", sum) }


计算0-100间偶数的和
//求出0-100的偶数和package mainimport "fmt"func main() { a := 0 for i := 1; i <= 100; i++ { if i%2 == 0 { a += i } } fmt.Printf("a: %v\n", a) }//输出结果如下 2550-------------------------------------------------------------------------------------------- //方法二 package mainimport "fmt"func main() { sum := 0 for i := 0; i <= 100; i += 2 { sum += i } fmt.Printf("sum: %v\n", sum) }


4. For-each range 循环
这种格式的循环可以对字符串、数组、切片等进行迭代输出元素
示例
//循环数组 package mainimport "fmt"func main() { names := []int{20, 30, 40, 50, 60} //a获取key,b获取value for a, b := range names { fmt.Print("key:", a, "value:", b, "\n") } }//输出结果如下 key:0value:20 key:1value:30 key:2value:40 key:3value:50 key:4value:60


//使用空白标识符直接获取value package mainimport "fmt"func main() { names := []int{20, 30, 40, 50, 60} //a获取key,b获取value for _, b := range names { fmt.Print("value:", b, "\n") } }//输出结果 value:20 value:30 value:40 value:50 value:60

【Go|Go 循环语句】

    推荐阅读