Go语言基础之流程控制for循环

Go语言基础之流程控制for循环

一、for(循环结构)

Go 语言中的所有循环类型均可以使用for关键字来完成。

for循环的基本格式如下:

for 初始语句;条件表达式;结束语句{
    循环体语句
}

初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 true ,则 {} 内的循环体将执行,接着执行 结束语。结束语句将在每次成功循环迭代后执行。在执行 结束语句后,条件将被再次检查。如果为 true, 则循环将继续执行,否则 for 循环将终止。(译注:这是典型的 for 循环三个表达式,第一个为初始化表达式或赋值语句;第二个为循环条件判定表达式;第三个为循环变量修正表达式,即此处的 结束语句)

这三个组成部分,即初始化,条件和 结束语句都是可选的。

条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。

func forDemo() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

for循环的初始语句可以被忽略,但是初始语句后的分号必须要写,例如:

func forDemo2() {
    i := 0
    for ; i < 10; i++ {
        fmt.Println(i)
    }
     b := 1
	for ; b < 10; {
		fmt.Println(" 第二种方式 全局作用局:", b)
		b++
	}
}

for循环的初始语句和结束语句都可以省略,例如:

func forDemo3() {
    i := 0
    for i < 10 {
        fmt.Println(i)
        i++
    }
    
   
}

这种写法类似于其他编程语言中的while,在while后添加一个条件表达式,满足条件表达式时持续循环,否则结束循环。

二、无限循环

for {
    循环体语句
}
# 方式一
for  {
		fmt.Println("sss")
	}

# 方式二
for ; ; {
		fmt.Println("sss")
	}

# 方式三
for true {
	//	fmt.Println("sss")
	//}


// break 退出
for  {
    fmt.Println("sss")
    break
}
// continue 
for  {
    fmt.Println("sss")
    continue
}

for循环可以通过breakgotoreturnpanic语句强制退出循环。

三、for range(键值循环)

Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:

  1. 数组、切片、字符串返回索引和值。
  2. map返回键和值。
  3. 通道(channel)只返回通道内的值。
// 循环数组
names:=[4]string{"张三","李四","王五"}
for i,v:=range names{
fmt.Println(i,v)
}

1 张三
2 李四
3 王五

// 循环切片
names:=[]string{"张三","李四","王五"}
for i,v:=range names{
fmt.Println(i,v)
}

1 张三
2 李四
3 王五

// 循环字符串
for i,v:=range "hello你好"{
fmt.Printf("%d %q\n",i,v)
}

0 'h'
1 'e'
2 'l'
3 'l'
4 'o'
5 '你'
8 '好'

// map返回键和值
ages:=map[string]int{
"张三":20,
"李四":30,
}
for i,v:=range ages{
fmt.Println(i,v)
}

李四 30
张三 20

四、break和continue

break

break 语句用于在完成正常执行之前突然终止 for 循环,之后程序将会在 for 循环下一行代码开始执行。

让我们写一个从 1 打印到 5 并且使用 break 跳出循环的程序。

package main

import (  
    "fmt"
)

func main() {  
    for i := 1; i <= 10; i++ {
        if i > 5 {
            break //loop is terminated if i > 5
        }
        fmt.Printf("%d ", i)
    }
    fmt.Printf("\nline after for loop")
}

在上面的程序中,在循环过程中 i 的值会被判断。如果 i 的值大于 5 然后 break 语句就会执行,循环就会被终止。打印语句会在 for 循环结束后执行,上面程序会输出为

1 2 3 4 5  
line after for loop

continue

continue 语句用来跳出 for 循环中当前循环。在 continue 语句后的所有的 for 循环语句都不会在本次循环中执行。循环体会在一下次循环中继续执行。

让我们写一个打印出 1 到 10 并且使用 continue 的程序。

package main

import (  
    "fmt"
)

func main() {  
    for i := 1; i <= 10; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Printf("%d ", i)
    }
}

在上面的程序中,这行代码 if i%2==0 会判断 i 除以 2 的余数是不是 0,如果是 0,这个数字就是偶数然后执行 continue 语句,从而控制程序进入下一个循环。因此在 continue 后面的打印语句不会被调用而程序会进入一下个循环。上面程序会输出 1 3 5 7 9

五、总结

  1. for分支的基本结构
for 初始化; 条件; 表达式{
	逻辑代码
}
  1. for分支几种方式的演变,省略初始化,省略初始化和表达式,while实现
  2. 死循环方式的演变
  3. brak和continue
for 初始化;条件;自增{
  内容
  初始化的内容只能再内部使用
}

for ;条件;自增{
  省略初始化
}

for ;条件;{
  省略初始化
  省略自增
}

for 条件{ 
  省略初始化
  省略自增
  去掉两个分号
  等同于while
}

for {
  省略初始化
  省略自增
  去掉两个分号
  去掉条件,就是死循环
}
上一篇:shell中break,continue,exit的应用


下一篇:break和continue