Go基础编程:流程控制

本文深入讲解Go语言的流程控制结构,包括顺序、选择和循环结构的详细使用方法,重点介绍了if语句、switch语句及for循环的不同形式和特殊用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接http://oldchen.iwulai.com/index.php/2019/01/17/go%E5%9F%BA%E7%A1%80%E7%BC%96%E7%A8%8B%EF%BC%9A%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6/

Go语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。

  • 顺序结构:程序按顺序执行,不发生跳转。
  • 选择结构:依据是否满足条件,有选择的执行相应功能。
  • 循环结构:依据条件是否满足,循环多次执行某段代码。

1.选择结构

* 条件表达式没有括号

* 支持一个初始化表达式(可以是并行方式)

* 左大括号和条件语句或else在同一行

* 支持单行模式

* 初始化语句中的变量我block级别,同时隐藏外部同名变量(即就近原则)

1.1if语句

package main
import "fmt"

func main() {
 var a int =3
 if a == 3 {
     fmt.Println("a=3")//a=3
 }
 if b := 3; b == 3 {
    fmt.Println("b=3")//b=3
 }
}

1.2if   else语句

package main
import "fmt"

func main() {
    if a := 3; a == 4 {
        fmt.Println("a==4")
    } else { //左大括号必须和条件语句或else在同一行
        fmt.Println("a!=4")//a!=4
    }
}

1.3if … else if … else语句

package main
import "fmt"

func main() {
    if a := 3; a > 3 {
        fmt.Println("a>3")
    } else if a < 3 {
        fmt.Println("a<3")
    } else if a == 3 {
        fmt.Println("a==3")//a==3
    } else {
        fmt.Println("error")
    }
}

1.4switch语句

* 可以使用任何类型或表达式作为条件语句

* 不需要写break,一旦条件符合自动终止

* 如希望继续执行下一个case,需使用fallthrough语句

* 支持一个初始化表达式(可以是并行方式),右侧需跟分号

* 左大括号必须和条件语句在同一行

Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码:

package main
import "fmt"

func main() {
    var score int = 90

    switch score{
    case 90:
        fmt.Println("优秀")//优秀
    case 80:
        fmt.Println("良好")
    case 50, 60, 70:
        fmt.Println("一般")
    default:
        fmt.Println("差")
    }
}

使用任何类型或表达式作为条件语句:

//1
    switch s1 := 90; s1 { //初始化语句;条件
    case 90:
        fmt.Println("优秀")
    case 80:
        fmt.Println("良好")
    default:
        fmt.Println("一般")
    }

//2
    var s2 int = 90
    switch { //这里没有写条件
    case s2 >= 90: //这里写判断语句
        fmt.Println("优秀")
    case s2 >= 80:
        fmt.Println("良好")
    default:
        fmt.Println("一般")
    }

//3
    switch s3 := 90; { //只有初始化语句,没有条件
    case s3 >= 90: //这里写判断语句
        fmt.Println("优秀")
    case s3 >= 80:
        fmt.Println("良好")
    default:
        fmt.Println("一般")
    }

2.循环语句

* Go只有for一个循环语句关键字,但支持3种形式

* 初始化和步进表达式可以是多个值

* 条件语句每次循环都会被重新检查,不建议在条件语句中使用函数,尽量提前计算好并以变量或常量代替

* 左大括号必须与条件语句在同一行

2.1for

    var i, sum int
    for i = 1; i <= 100; i++ {
        sum += i
    }
    fmt.Println("sum = ", sum)

2.2range

 s := "abc"
    for i := range s { //支持 string/array/slice/map。
        fmt.Printf("%c\n", s[i])
    }
    for _, c := range s { // 忽略 index
        fmt.Printf("%c\n", c)
    }

 跳转语句

* 三个语法都可以配合标签使用

* 标签名区分大小写,定义了若不使用则会造成编译错误

* break和continue配合标签可用于多层循环的跳出

* goto是跳转执行位置,与其他2个配合标签使用结果不同

break和continue

在循环里面有两个关键操作break和continue,break操作是跳出当前循环,continue是跳过本次循环。

   

for i := 0; i < 5; i++ {
        if 2 == i {
            //break    //break操作是跳出当前循环
            continue //continue是跳过本次循环
        }
        fmt.Println(i)
    }

当嵌套过深的时候,break和continue还可以跟着标号,用来跳到多重循环中的外层循环:

func main() {
LABEL:
    for i := 0; i < 5; i++ {
        for {
            fmt.Println(i)
            break LABEL //跳出所有循环
            //continue LABEL //只是跳过for {}循环,外层循环继续
        }
    }
}

注意:break可⽤于for、switch、select,⽽continue仅能⽤于for循环。

goto

用goto跳转到必须在当前函数内定义的标签:

func main() {
LABEL:
    for i := 0; i < 5; i++ {
        for {
            fmt.Println(i)
            //break LABEL //跳出所有循环
            //continue LABEL //只是跳过for {}循环,外层循环继续
            goto LABEL //跳转到标签LABEL,从这里开始,执行代码
        }
    }
}

总结: 
break + 标签:跳出多层循环,与标签同一层 
goto + 标签:跳转到标签的位置继续执行 
continue + 标签:跳到标签处开始执行,并跳过本次循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值