【Golang系列】-for循环

2022-03-08

for循环

只有for关键字
语法:

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

package main
import "fmt"
func f1() {
    for i := 1; i <= 10; i++ {
        fmt.Println(i)
    }
}
func main() {
    f1()
}

package main
import "fmt"
func f1() {
    i := 1
    for ; i <= 10; i++ {
        fmt.Println(i)
    }
}
func main() {
    f1()
}

初始条件和结束条件都可以省略

package main
import "fmt"
func f1() {
    i := 1
    for i <= 10 {
        fmt.Println(i)
        i++
    }
}
func main() {
    f1()
}

永真 死循环

package main
import "fmt"
func f1() {
    for {
        fmt.Println("一直在执行~~")
    }
}
func main() {
    f1()
}

结果

一直在执行~~
一直在执行~~
一直在执行~~
一直在执行~~
一直在执行~~
一直在执行~~
...

for循环可以通过break、goto、return、panic语句强制退出循环

for range 循环

可以使用for range 遍历数组、切片、字符串、map及通道,通过for range遍历的返回值有以下规律:

  • 数组、切片、字符串返回索引和值
  • map返回键和值
  • 通道返回通道内的值
package main

import "fmt"

func f() {
    var a = [5]int{1, 2, 3, 4, 5}
    for i, v := range a {
        fmt.Println(i, v)
    }
}

func main() {
    f()
}

流程控制关键字 break

可以结束for Switch select的代码块
注意

  • 单独在select中使用break和不使用没啥区别
  • 单独在switch语句,并且没有fallthougt,使用和不使用没啥区别
  • 单独在switch语句,有fallthougt,使用break能终止fallthougt后面的
    case语句
  • 带标签的break,可以跳出多层select、switch作用域,让break更加灵活
package main

import "fmt"

func f2() {
    a := 100
    switch a {
    case 100:
        fmt.Println("100")
        //break
        fallthrough
    case 200:
        fmt.Println("200")
    case 300:
        fmt.Println("300")
    }
}

func main() {
    f2()
}

package main

import "fmt"

func f() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
        if i >= 5 {
            break
        }
    }
}

func main() {
    f()
}

continue只是用在循环中,在go中只能用在for循环中 ,可以终止本次循环,进行下一次循环,在continue语句后添加标签时,表示开始标签对应的循环

goto

代码间的无条件跳转