老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

Golang培训班_Go语言支持哪三种循环控制语句?

老男孩IT教育

常见问题

2021年12月20日 17:00

循环控制语句可以控制循环体内语句的执行过程。GO语言支持goto、break、continue 三种循环控制语句,三个语句都可以配合标签(label)使用,标签名区分大小写,定义后不使用会造成编译错误。

  循环控制语句可以控制循环体内语句的执行过程。GO语言支持goto、break、continue三种循环控制语句,三个语句都可以配合标签(label)使用,标签名区分大小写,定义后不使用会造成编译错误。

Go语言培训

  goto语句

  Go语言支持在函数内goto跳转。goto语句可以无条件地转移到过程中指定的行,通常与条件语句配合使用。可用来实现条件转移、构成循环、跳出循环体等功能。实例如下:

  1、先定义标签后定义goto语句

package main

import "fmt"

func main() {
    var i int = 10

GO:
    for i < 20 {
        if i == 15 { //跳过迭代
            i = i + 1
            goto GO
        }
        fmt.Printf("i的值为 : %d\n", i)
        i++
    }
}

  2、先定义goto语句后定义标签

package main

import "fmt"

func main() {
    var i int
    for {
        fmt.Println(i)
        i++
        if i > 2 {
            goto oldboy
        }
    }
oldboy:
    fmt.Println("golang")
}

  注意:goto语句与标签之间不能有变量声明,否则编译错误。

package main

import "fmt"

func main() {
    fmt.Println("start")
    goto Loop
    var say = "hello oldboy"
    fmt.Println(say)
Loop:
    fmt.Println("end")
}

  编译错误:

./main.go:7:7: goto Loop jumps over declaration of say at ./main.go:8:6

  break语句

  1、break语句中断当前for循环,并开始执行循环之后的语句

package main

import "fmt"

func main() {
    var i int = 10

    for i < 20 {
        fmt.Printf("i 的值为 : %d\n", i)
        i++
        if i > 15 {
            // break 语句跳出循环
            break
        }
    }
}

  2、break语句中断当前for range循环,并开始执行循环之后的语句

package main

import (
    "fmt"
)

func main() {
    m := map[int]string{
        1: "oldboy",
        2: "Linux",
        3: "Python",
        4: "Java",
        5: "Golang",
    }

    for k, v := range m {
        fmt.Printf("%d => %s \n", k, v)
        if v == "Golang" {
            // break 语句跳出循环
            break
        }
    }
}

  3、break语句在执行一条case后跳出switch循环

package main

import (
    "fmt"
)

func main() {

    name := "Golang"
    switch name {
    case "oldboy":
        fmt.Println(name)
        break
    case "Linux":
        fmt.Println(name)
        break
    case "Golang":
        fmt.Println(name)
        break
    case "Python":
        fmt.Println(name)
        break
    case "Java":
        fmt.Println(name)
        break
    case "DBA":
        fmt.Println(name)
        break
    }
}

  4、break语句在执行一条case后跳出select循环

package main

import "fmt"

func main() {
    var ch chan int
    ch = make(chan int, 1)
    // ch <- 1
    select {
    case i := <-ch:
        fmt.Printf("received %d %s", i, " from ch\n")
        break
    default:
        fmt.Println("break")
        break
    }
}

  5、Break label语句跳出多层嵌套循环

package main

import (
    "fmt"
)

func main() {
    fmt.Println("start")

Exit:
    for i := 0; i < 9; i++ {
        for j := 0; j < 9; j++ {
            if i+j > 15 {
                fmt.Println("exit")
                break Exit
            }
        }
    }

    fmt.Println("end")
}

  break标签除了可以跳出for循环,还可以跳出select、switch循环。

  注意:label要写在循环的开始而不是结束的地方,和goto语句不一样。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("start")

    for i := 0; i < 9; i++ {
        for j := 0; j < 9; j++ {
            if i+j > 15 {
                fmt.Println("exit")
                break Exit
            }
        }
    }
Exit:
    fmt.Println("end")
}

  编译错误:

./main.go:14:11: break label not defined: Exit
./main.go:18:1: label Exit defined and not used

  continue语句

  1、continue语句在for循环和for range 循环中用于跳过当前循环的剩余语句,然后继续进行下一轮循环。

package main

import "fmt"

func main() {
    // for 循环
    for i := 0; i < 5; i++ {
        if i == 2 {
            continue
        }
        fmt.Printf("i 的值为 : %d\n", i)
    }
    // for range 循环
    sli := []string{"Linux", "Python", "Golang", "Java"}
    for _, v := range sli {
        fmt.Println(v)
        if v != "Golang" {
            continue
        }
        fmt.Println("The old boy welcomes you.")
    }
}

  2、continue label语句可在多级嵌套循环中跳出

package main

import "fmt"

func main() {

BreakLabel:
    for i := 0; i < 3; i++ {
    ContinueLabel:
        for j := 0; j < 5; j++ {
            if j > 2 {
                continue ContinueLabel
            }
            if i > 1 {
                break BreakLabel
            }

            fmt.Print(i, ":", j, " ")
        }
        fmt.Println()
    }
}

  随着技术领域的逐步拓展,Go语言工程师的需求量也在逐步增加。老男孩教育go培训课程内容多次更新迭代,更加注重学员的实践动手能力以及思维的形成,杜绝纸上谈兵,全企业真实案例结合理论授课,让学员更好的过渡到工作岗位。想要了解go语言课程信息,欢迎咨询右下角在线客服。

  推荐阅读:

  用Golang语言进行网站开发有哪些优势?GO开发语言培训

  0基础学习Go需要掌握那些编程语法?老男孩Go语言培训

  【GO语言知识培训】之单元测试学习!

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。