Go语言7-基本语法-流程控制

本文深入探讨了Go语言中的流程控制语句,包括条件语句if、if...else、if...elseif...else、if嵌套,以及switch语句的不同形式和用法。同时,文章详细解析了四种for循环的结构和特性,以及跳转语句如goto、break和continue的使用场景。

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

  • 流程控制-选择语句

  1. 1条件语句if

if 布尔表达式{//布尔表达式不需要括号

/*在布尔表达式为true时执行*/

}

  1. 2 if...else 语句

if 布尔表达式{
/*在布尔表达式为true时执行*/
} else {
/*在布尔表达式为false时执行*/
}

  1. 3if...else if...else语句

if 布尔表达式1 {
/*在布尔表达式1 为true时执行*/
} else if 布尔表达式2{
/*在布尔表达式2 为true时执行*/
} else {
/*在布尔表达式1、2 均为false时执行*/
}

  1. 4 if 嵌套

if 布尔表达式1{
/*在布尔表达式1 为true时执行*/
    if  布尔表达式2{
    /*在布尔表达式2 为true时执行*/
    }
}

 

Demo

package main
import "fmt"
func main() {
    var a int = 10
    /*if语句*/
    if a > 5 {
        fmt.Println("a大于5")
    }
    /*if...else语句*/
    if a > 10 {
        fmt.Println("a大于10")
    } else {
        fmt.Println("a小于等于10")
    }
    /*if...else if...else语句*/
    if a > 10 {
        fmt.Println("a大于10")
    } else if a == 10 {
        fmt.Println("a等于10")
    } else {
        fmt.Println("a小于10")
    }
    /*if嵌套语句*/
    if a > 5 {
        if a == 10 {
            fmt.Printf("a=%d\n", a)
        }
    }
}

 

  1. 5 switch

形式 1

/*case语句存在一个和s相等的条件,执行对应的case语句*/
switch s {
    case s1:
        ...
    case s2,s3:
        ...
    default:
        ...
}

形式2

/*如果switch之后无表达式,则默认为true,case后面的条件第一个满足true的,执行该case语句*/
switch {
    case s1:
        ...
    case s2:
        ...
    default:
        ...
}

形式3

switch {
    case s1:
        ...
        /*fallthrouth语句应该位于case语句的最后一句,
        则强制执行下一个case语句或者default语句*/
        fallthrough
    case s2:
        ...
    default:
        ...
}
  • switch语句从上至下执行,直到找到匹配项
  • switch每一个case默认都有break功能,匹配之后的case条件不在受关注。这点和其他语言不一样。
  • case之后的条件可能右多个满足条件,使用逗号隔开,如:case s1,s2
  • 如果所以的case条件都不满足,执行default语句
  • 如果switch之后无表达式,则默认为true
  • 当一个case语句之后带有fallthrough,则强制执行下一个case语句,不论下一个case条件是否满足;若fallthrough位于最后一个case语句中,则强制执行default语句。另外,fallthrough语句应该是case子句中的最后一个,如果它出现在case语句中间则会报错。

Demo

package main
import "fmt"
func main() {
    var grade string
    var marks int = 70
    /*根据分数判断A,B,C,D;switch之后默认为true,所有case条件中
    第一个满足true的执行相应case中语句*/
    switch {
    case marks >=90:
        grade = "A"
    case marks >=80:
        grade = "B"
    /*满足其中一个条件*/
    case marks >=60 :
        grade = "C"
    default:
        grade = "D"
    }
    /*根据A B C D判断学生等级;switch之后默认为true,所有case之后的条件结果为布尔型*/
    switch {
    /*满足其中一个条件,即得"优良"*/
    case grade == "A",grade == "B":
        fmt.Printf("优良!\n" )
    case grade == "C":
        fmt.Printf("及格\n" )
        fallthrough //强制执行default语句
    default:
        fmt.Printf("不及格\n" )
    }
    fmt.Printf("你的等级是:%s\n", grade )
}
  1. 6 四种for循环

//形式1
for init; condition; post {
/*循环体*/
}
//形式2
for init; condition; { //分号不能省略
/*循环体*/
post
}
//形式3

for condition { //只有关系表达式或逻辑表达式
/*循环体*/
}
//形式4
for { /*无限循环:for之后没有任何表达式,此时默认为true,陷入死循环
/*循环体*/
}

Demo

package main
import "fmt"
func main() {
    var sum1, sum2, sum3 int
    /*循环形式1*/
    for i := 1; i <= 10; i++ {
        sum1 += i
    }
    fmt.Println("sum1 = ", sum1)
    /*循环形式2*/
    for i := 1; i <= 10; { //";不能省"
        sum2 += i
        i++
    }
    fmt.Println("sum2 = ", sum2)
    /*循环形式3*/
    var i int
    for i <= 10 {
        sum3 += i
        i++
    }
    fmt.Println("sum3 = ", sum3)
}
  1. 7 跳转语句
关键字描述格式
goto无条件的跳转到本函数的某个标签,执行标签下的语句。

goto label

    ...

label:

  statement

break跳出循环体,并执行循环之后的语句。break
continue跳过当前循环,并执行下一次循环。continue

Demo

package main
import "fmt"
func main() {
    /*goto:无条件的跳转值跟函数的某个标签,执行标签下面的语句*/
    var i, sum1 int
    for {
        i++
        if i > 5 {
            goto label
        }
        sum1 += i
    }
label:
    fmt.Printf("i = %d, sum1 = %d\n", i, sum1)
    /*break:跳出循环,并执行循环之后的语句*/
    var j, sum2 int
    for j = 1; j <= 10; j++ {
        if j > 5 {
        break
        }
        sum2 += j
    }
    fmt.Printf("j = %d, sum2 = %d\n", j, sum2)
    /*continue:跳过当前循环,并执行下一次循环*/
    var k, sum3 int
    for k = 1; k <= 10; k++ {
        if k == 5 {
            continue
        }
    sum3 += k
    }
    fmt.Printf("k = %d, sum3 = %d\n", k, sum3)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值