AI智能
改变未来

Go 循环语句 (循环嵌套,break,continue,goto)


Go 循环语句

一、概述

二、Go 语言 for 循环

三、循环嵌套

四、break 语句

五、 continue 语句

六、goto 语句

一、概述

在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。

循环程序的流程图:

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

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

1. 循环控制语句
循环控制语句可以控制循环体内语句的执行过程。

GO 语言支持以下几种循环控制语句:

控制语句 描述
break 语句 经常用于中断当前 for 循环或跳出 switch 语句
continue 语句 跳过当前循环的剩余语句,然后继续进行下一轮循环。
goto 语句 将控制转移到被标记的语句。

2. 无限循环
如果循环中条件语句永远不为 false 则会进行无限循环,我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环:

示例

package mainimport (\"fmt\"\"time\")func main() {i := 0for true { 		//for后面true为可选,若不加,默认为truefmt.Printf(\"i: %v\\n\", i)i++time.Sleep(time.Second)}}//输出结果如下i: 0i: 1i: 2i: 3i: 4i: 5i: 6i: 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 语句语法流程如下图所示:

3. 示例
计算 1 到 10 的数字之和

package mainimport \"fmt\"func main() {sum := 0for i := 0; i <= 10; i++ {sum += i}fmt.Printf(\"sum: %v\\n\", sum)}//输出结果为:55

———————————————————————————————–
//int 和 post 参数是可选的,我们可以直接省略他,类型while语句

package mainimport \"fmt\"func main() {sum := 0i := 1for i <= 10 {sum += ii++}fmt.Printf(\"sum: %v\\n\", sum)}

  

计算0-100间偶数的和

//求出0-100的偶数和package mainimport \"fmt\"func main() {a := 0for i := 1; i <= 100; i++ {if i%2 == 0 {a += i}}fmt.Printf(\"a: %v\\n\", a)}//输出结果如下2550--------------------------------------------------------------------------------------------//方法二package mainimport \"fmt\"func main() {sum := 0for 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获取valuefor a, b := range names {fmt.Print(\"key:\", a, \"  value:\", b, \"\\n\")}}//输出结果如下key:0  value:20key:1  value:30key:2  value:40key:3  value:50key:4  value:60

  

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

  

三、循环嵌套

Go 语言允许用户在循环内使用循环

1. 语法
以下为 Go 语言嵌套循环的格式:

for [condition |  ( init; condition; increment ) | Range]{for [condition |  ( init; condition; increment ) | Range]{statement(s);}statement(s);}

 

2. 示例
以下实例使用循环嵌套来输出 2 到 100 间的素数:

package mainimport \"fmt\"func main() {/* 定义局部变量 */var i, j intfor i=2; i < 100; i++ {for j=2; j <= (i/j); j++ {if(i%j==0) {break; // 如果发现因子,则不是素数}}if(j > (i/j)) {fmt.Printf(\"%d  是素数\\n\", i);}}}//输出结果如下2  是素数3  是素数5  是素数7  是素数11  是素数13  是素数17  是素数19  是素数23  是素数29  是素数31  是素数37  是素数41  是素数43  是素数47  是素数53  是素数59  是素数61  是素数67  是素数71  是素数73  是素数79  是素数83  是素数89  是素数97  是素数

  

99乘法表:

package mainimport \"fmt\"func main() {for i := 1; i < 10; i++ {for j := 1; j < i+1; j++ {fmt.Printf(\"%d * %d = %d\\t\", i, j, j*i)}fmt.Println()}}//输出结果如下1 * 1 = 12 * 1 = 2	2 * 2 = 43 * 1 = 3	3 * 2 = 6	3 * 3 = 94 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 165 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 256 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 367 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 498 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 649 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81

  

四、break 语句

1. 语法
Go 语言中 break 语句用于以下两方面:

用于循环语句中跳出循环,并开始执行循环之后的语句。
break 在 switch(开关语句)中在执行一条 case 后跳出语句的作用。
在多重循环中,可以用标号 label 标出想 break 的循环。
break 语法格式如下:

break;

  

流程如图:

2. 示例

  • 在变量 a 大于 15 的时候跳出循环:
package mainimport \"fmt\"func main() {var a int = 10for a < 20 {fmt.Printf(\"a: %v\\n\", a)a++if a > 15 {break}}}//执行结果如下a: 10a: 11a: 12a: 13a: 14a: 15

  

  • 演示使用标记和不使用标记的区别
package mainimport \"fmt\"func main() {//不适用标记fmt.Println(\"----break----\")for i := 1; i <= 3; i++ {fmt.Printf(\"i: %v\\n\", i)for a := 11; a <= 13; a++ {fmt.Printf(\"a: %v\\n\", a)break}}//使用标记fmt.Println(\"----break label----\")fla:for i := 1; i <= 3; i++ {fmt.Printf(\"i: %v\\n\", i)for a := 11; a <= 13; a++ {fmt.Printf(\"a: %v\\n\", a)break fla}}}//输出结果如下----break----i: 1a: 11i: 2a: 11i: 3a: 11----break label----i: 1a: 11

  

五、 continue 语句

1. 语法
Go 语言的 continue 语句 有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句。

for 循环中,执行 continue 语句会触发 for 增量语句的执行。

在多重循环中,可以用标号 label 标出想 continue 的循环。

continue 语法格式如下:

continue;

  

continue 语句流程图如下:

2. 示例

  • 在变量 a 等于 15 的时候跳过本次循环执行下一次循环:
package mainimport \"fmt\"func main() {var a int = 10for a < 20 {if a == 15 {a = a + 1continue}fmt.Printf(\"a: %v\\n\", a)a++}}//输出结果如下a: 10a: 11a: 12a: 13a: 14a: 16a: 17a: 18a: 19

  

  • 用多重循环演示使用标记和不使用标记的区别:
package mainimport \"fmt\"func main() {// 不使用标记fmt.Println(\"---- continue ---- \")for i := 1; i <= 3; i++ {fmt.Printf(\"i: %d\\n\", i)for a := 11; a <= 13; a++ {fmt.Printf(\"a: %d\\n\", a)continue}}// 使用标记fmt.Println(\"---- continue label ----\")re:for i := 1; i <= 3; i++ {fmt.Printf(\"i: %d\\n\", i)for a := 11; a <= 13; a++ {fmt.Printf(\"a: %d\\n\", a)continue re}}}//输出结果如下---- continue ----i: 1a: 11a: 12a: 13i: 2a: 11a: 12a: 13i: 3a: 11a: 12a: 13---- continue label ----i: 1a: 11i: 2a: 11i: 3a: 11

  

六、goto 语句

1. 语法
Go 语言的 goto 语句可以无条件地转移到过程中指定的行

goto 语句通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出循环体等功能。

但是,在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。

goto 语法格式如下:

goto label;...label: statement;

  

goto 语句流程图如下:

2. 示例

  • 在变量 a 等于 15 的时候跳过本次循环并回到循环的开始语句 LOOP 处:
package mainimport \"fmt\"func main() {/* 定义局部变量 */var a int = 10/* 循环 */LOOP:for a < 20 {if a == 15 {/* 跳过迭代 */a = a + 1goto LOOP}fmt.Printf(\"a的值为 : %d\\n\", a)a++}}//输出结果如下a的值为 : 10a的值为 : 11a的值为 : 12a的值为 : 13a的值为 : 14a的值为 : 16a的值为 : 17a的值为 : 18a的值为 : 19

  

  • goto 语句打印九九乘法表:
package mainimport \"fmt\"//for循环配合goto打印九九乘法表func main() {for m := 1; m < 10; m++ {n := 1LOOP:if n <= m {fmt.Printf(\"%dx%d=%d \", n, m, m*n)n++goto LOOP} else {fmt.Println(\"\")}n++}}

  

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Go 循环语句 (循环嵌套,break,continue,goto)