• 1.1. 循环的说明:

Go 语言没有 while 和 do...while 语法。

  • 1.2. for循环的语法格式:

语句块中可以用continue语句跳过本次循环继续下一次循环。break语句跳出循环

for 循环变量初始化; 循环条件; 循环变量迭代 {
        //语句块

}

例子如下:i 的作用域在for循环和它的语句块内。

for i := 0; i < 5; i++ {
        fmt.Println("循环",i) //输出:循环 0 到 循环 4
    }
  • 1.2.1. 1、可以这样。把第一个赋值的地方留个空语句。

    var i int  = 0
    for ; i < 5; i++ {
        fmt.Println("循环",i) //输出:循环 0 到 循环 4
    }
  • 1.2.2. 2、可以只留下条件语句。去掉第一个 和 第三个语句。例子如下:

var i int  = 0
    for i < 5 {
        fmt.Println("循环",i) //输出:循环 0 到 循环 4
        i ++
    }
  • 1.2.3. 3、可以把for后面语句全部去掉for {}。等价于for ; ; {} ,就是一个死循环。通常需要配合break语句退出循环。

    for {
        fmt.Println("死循环体")
        break //跳出循环
    }
    for ; ; {
        fmt.Println("死循环体2")
    }
  • 1.2.4. 4、continue语句跳过本次循环继续下一次循环。break语句跳出循环。

for ; ; {
        num ++
        if num == 1 {
            fmt.Println("死循环体2",num) //死循环体2 1
            continue
        }else if num > 3 {
            fmt.Println("死循环体2",num) //死循环体2 4
            break
        }
    }
  • 1.2.5. 5、遍历字符串,要使用for-range遍历方式。

5.1、常规遍历方式如下:这种遍历是按照字节遍历,因此如果有中文等非英文字符,就会出现乱码。

     var str string  = "你好,hi"
    for i := 0 ; i < len(str) ; i++ {
        //遍历是按照字节遍历,因此如果有中文等非英文字符,就会出现乱码
        fmt.Printf("str[%d]=%c\n", i, str[i])
    }

输出如下:按照字节遍历,str[i] 从0到8,每个中文3个字节。

5.2、切片解决乱码问题。要使用传统方式遍历,可以把字符串转换为rune类型的切片。这时候就不是遍历字符串类型,而是遍历rune类型的切片了。

var strOld string  = "你好,hi"
    str := []rune(strOld)
    for i := 0 ; i < len(str) ; i++ {
        fmt.Printf("str[%d]=%c \n", i, str[i])
    }

5.3、for-range遍历方式如下:

    var str string  = "你好,hi"
    for i, ch := range str {
        fmt.Printf("str[%d]=%c \n", i, ch)
    }

其中 i 表示字符串下标的起始位置;range str 表示遍历str字符串;ch是字符串的值。运行结果如下:

  • 1.2.6. 6、可以使用for的死循环,实现其他语言的while、do..while 循环。

6.1、while语句的实现:

   for {
        if 条件表达式 {
            break //跳出循环
        }
        其他语句块
        循环变量迭代
    }

6、2、do...while语句的实现:

    for {

        其他语句块
        循环变量迭代
        if 条件表达式 {
            break //跳出循环
        }
    }
  • 1.2.7. 7、break 语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块。

例子如下:外面一层死循环,里面用break直接跳到标签lable1,跳出了2层循环。

func main() {

    lable1 :
    for { //死循环
        for i := 0 ; i < 4 ; i++ {
            fmt.Printf("进入循环。。。。%d", i)
            break lable1
        }
    }


}
  • 1.2.8. 8、continue语句:

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

  • continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环

func main() {

    lable1 :
    for k := 0 ; k < 2 ; k++ { 
       fmt.Printf("外层循环。。。。%d \n", k)

        for i := 0 ; i < 4 ; i++ {
            fmt.Printf("内层for循环。。。。%d \n", i)
            continue lable1
        }
    }

}

执行之后输出如下:

外层循环。。。。0

内层for循环。。。。0

外层循环。。。。1

内层for循环。。。。0

continue 跳到 lable1标签,就是把内层的循环结束了。外层的循环还是继续下一个循环。

如果有3层循环,continue 到最外面就把内部的2个循环跳过了。

results matching ""

    No results matching ""