Go 语言 for 循环、break、continue 讲解

笑着哭i 提交于 2020-01-16 20:16:00

Go 语言 for 循环、break、continue 讲解

一、for 循环控制:

1.基本概念:

基本语法

for 循环变量初始化;循环条件;循环变量迭代 {

​ 循环操作(语句)

}

简单使用

package main
import (
	"fmt"
)
func main(){
	for i := 1; i <=6; i++{
		fmt.Println("输出结果:", i)
	}
}	
// 输出结果:
输出结果: 1
输出结果: 2
输出结果: 3
输出结果: 4
输出结果: 5
输出结果: 6

for 循环 执行流程图
在这里插入图片描述

for 循环执行的顺序说明

  1. 执行 循环变量初始化

    i := 1;

  2. 执行循环条件

    i <= 6;

  3. 如果循环为真,就执行循环操作

    fmt.Println(“输出结果:”, i)

  4. 执行循环遍历迭代

    i ++

  5. 反复执行,2、3、4步骤,直到循环条件为假时,退出for 循环;

2.使用细节、注意事项:

  1. 循环条件是返回一个布尔值的表达式;

  2. for 循环的第二种基本方式:

    • 基本语法:

      for 循环判断条件 {

      ​ // 循环执行语句

      }

      将变量初始化和变量迭代写到其它位置

    • 举个栗子:

      package main
      
      import (
      	"fmt"
      )
      
      func main(){
      	// for 循环的第二种写法
      	i := 1  // 循环遍历的初始化
      	for i <=6 {  // 循环条件
      		fmt.Println("输出结果:", i)
      		i++  // 循环遍历迭代
      	}
      }	
      // 输出结果:
      输出结果: 1
      输出结果: 2
      输出结果: 3
      输出结果: 4
      输出结果: 5
      输出结果: 6
      
    1. for 循环第三种使用方式:

      • 基本语法:

        for {

        // 循环执行语句

        }

      • 上面写法等价 for ; ; {},是一个无限循环,通常要配合 break 语句使用:

      • 举个栗子

        package main
        
        import (
        	"fmt"
        )
        
        func main(){
        	// for 循环的第三种写法, 这种写法通常会配合 break 使用
        	i := 1
        	for {  // 等价于 for ;; {}
        		if i <= 6 {
        			fmt.Println("ok", i)
        		} else {
        			break  // break跳出循环
        		}
        		i++
        	}
        
        }	
        // 输出结果:
        ok 1
        ok 2
        ok 3
        ok 4
        ok 5
        ok 6
        

3.for-range 的使用:

基本语法

for index, value := range 常量 {

​ // 循环操作语句

}

举个栗子

package main

import (
	"fmt"
)

func main(){
	// for -range 的简单使用
	i := "abcdefg"
	for index, val := range i {
		fmt.Printf("index=%d  val=%c\n", index, val)
	}

}	
// 输出结果:
index=0  val=a
index=1  val=b
index=2  val=c
index=3  val=d
index=4  val=e
index=5  val=f
index=6  val=g
  • index:是变量 i 值对应的索引(下标);
  • val:是字符串中对应的值;

for 与 for - range 区别:

如果我们字符串含有中文,使用 for 循环遍历字符串方式,提示错误,出现乱码。for 循环 对 字符串的遍历是字节遍历,而一个汉字在 utf-8 编码 对应的是 3个 字节

for 循环 传统的方式

  • 需要将 str 转成 []rune 切片

    package main
    
    import (
    	"fmt"
    )
    
    func main(){
    	// for 循环传统方式  变量中文字符串
    	var str string = "hello,world!中国"
    	str1 := []rune(str)
    	for i := 0; i < len(str1); i++ {
    		fmt.Printf("%c\n", str1[i])
    	}
    
    }	
    // 输出结果
    h
    e
    l
    l
    o
    ,
    w
    o
    r
    l
    d
    !
    中
    国
    

for-range 循环 方式

  • for-range 遍历方式,按照字符方式遍历

    package main
    
    import (
    	"fmt"
    )
    
    func main(){
    	// for-range 循环使用
    	var str  string = "hello,world!中国"
    	for index, val := range str{
    		fmt.Printf("index=%d, val=%c\n", index, val)
    	}
    
    }	
    // 输出结果:
    index=0, val=h
    index=1, val=e
    index=2, val=l
    index=3, val=l
    index=4, val=o
    index=5, val=,
    index=6, val=w
    index=7, val=o
    index=8, val=r
    index=9, val=l
    index=10, val=d
    index=11, val=!
    index=12, val=中
    index=15, val=

总结

  1. 传统的 for 循环遍历包含中文字符串 ,需要将字符串转换**[]rune(字符串)切片**。默认是按字节方式进行处理;
  2. 对于for-range 循环遍历包含中文字符串,直接遍历即可。默认是按字符进行处理,无需转换;

二、break 的使用:

1.基本概念:

break 语句用于终止某个语句块的执行,用于中断当前for 循环跳出switch语句

基础语法

{

​ …

​ break

​ …

}

基本使用

func main(){
	for i:= 0; i < 4; i++ {
		for j := 0; j < 10 ; j ++{
			if j == 2 {
				break
			}
			fmt.Println("j=", j)
		}
	}
}
// 输出结果:
j= 0
j= 1
j= 0
j= 1
j= 0
j= 1
j= 0
j= 1
  • break 默认跳出最近for 循环

2.注意事项:

break 语句在多层嵌套语句块中时,可以通过标签指明终止哪一层语句块;

func main(){
	lable1:  // 设置跳出for 循环的标签
	for i:= 0; i < 4; i++ {
		for j := 0; j < 10 ; j ++{
			if j == 2 {
				break lable1
			}
			fmt.Println("j=", j)
		}
	}
	
}
// 输出结果: 
j= 0
j= 1
  • break 后面可指定标签,跳出标签对应的for循环

三、continue 的使用:

1. 基本概念:

continue 语句用于结束本次循环,继续执行下一次循环

continue 语句出现在多层嵌套的循环语句体中,可以通过标签指明要跳过的是哪一层循环。与break 标签的使用规则一样。

基础语法

{

​ …

​ continue

​ …

}

基本使用

package main

import (
	"fmt"
)

func main(){
	
	for i:= 0; i < 2; i++ {
		for j := 0; j < 6 ; j ++{
			if j == 2 {
				continue
			}
			fmt.Println("j=", j)
		}
	}
	
}
// 输出结果:
j= 0
j= 1
j= 3
j= 4
j= 5
j= 0
j= 1
j= 3
j= 4
j= 5
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!