【Go流程控制结构】

流程控制语句用于控制程序的执行顺序,这样程序就具备了逻辑结构。一般流程控制语句需要和各种条件结合使用,比如条件判断if,用于选择的switch,用于循环的for。

if条件语句

if语句是条件语句,它根据布尔值的表达式来决定选择那个分支执行:如果表达式的值为true,则if分支被执行;如果表达式的值为false,则else分支被执行。

关于if条件语句的使用有一些规则:

  1. if后面的条件表达式不需要使用(), 和有些编程语言不一样,这更体现Go语言的简洁;

  2. 每个条件分支(if 或者 else)中的大括号是必须的,哪怕大括号里面只有一行代码;

  3. if 紧跟的大括号(不能独占一行,else前的大括号)也不行独占一行,否则编译不通过;

  4. 在if……else 条件语句中可以增加多个 else if 增加更多的条件分支。但是这种方式不被推荐,因为代码可读性差,多个条件分支可以用switch代替,使代码更简洁

 func main() {
     if i := 6; i > 10 {
         fmt.Println("I > 10")
     } else if i > 5 && i <= 10 {
         fmt.Println("5<i<=10")
     } else {
         fmt.Println("i <= 5")
     }
 }

和其他编程语言不同,在Go语言的if语句中,可以有一个简单的表达式语句,并将该语句和条件语句使用分号; 分开。通过if 简单语句声明的变量,只能在整个if …… else if …… else 条件语句汇总使用。 如上面示例所示。

switch选择语句

if条件语句比较适合分支较少的情况,如果有很多分支的话,选择switch会更方便,Go语言的switch语句非常强大且灵活。switch语句同样也可以用一个简单的语句来做初始化,同样用分号;分割。每一个case就是一个分支,分支条件为true该分支才会执行,而且case分之后的条件表达式也不能用小括号()包裹

在Go语言中,switch的case从上到下逐一进行判断,一旦满足条件,立即执行对应的分支并返回,其余分支不再做判断。即Go语言的switch在默认情况下,case最后自带break。这和其他编程语言不一样。Go语言这种设计就是为了防止写break,下一个case被执行。如果真有需要,需要执行下一个紧跟的case怎么办? Go语言提供fallthrough关键字,它只能作为这种子句中最后一个非空语句使用。

  • fallthrough 不能用在switch最后一个分支上

  • fallthrough到下一个case时,不执行case匹配检查

 switch {
     case false:
         fmt.Println("The integer was <= 4")
         fallthrough
     case true:
         fmt.Println("The integer was <= 5")
         fallthrough
     case false:
         fmt.Println("The integer was <= 6")
         fallthrough
     case true:
         fmt.Println("The integer was <= 7")
         fallthrough
     case false:
         fmt.Println("The integer was <= 8")
     default:
         fmt.Println("default case")
 }
 输出结果:
 The integer was <= 5
 The integer was <= 6
 The integer was <= 7
 The integer was <= 8

在这个例子中,不仅有初始化的简单语句,还有表达式。当switch 后面有表达式时,case后的值就要和这个表达式的结果类型相同,比如这里的i是int类型,那么case后就只能是int类型。如果是其他类型,会提示类型不匹配,无法编译通过

switch后的表达式没有太多限制,是一个合法的表达式即可,也不一定要求是常量或者整数。可以直接把比较表达式放在switch后面:

 switch 2 > 1 {
 case true :
     fmt.Println("true")
 case false :
     fmt.Println("false")
 }

for循环语句

经典的for循环,由三部分组成,其中需要两个; 分割。

 sum := 0
 for i := 1; i <= 100; i++ {
     sum += i
 }
 fmt.Println("the sum is ", sum)
  • 第一部分是一个简单语句,一般用于for循环的初始化,比如声明并初始化了变量i。

  • 第二部分是for循环的条件,即表示for循环什么时候结束。

  • 第三部分是更新语句,一般用于更新循环变量。

需要特别注意的是,Go语言的for循环非常强大,以上三部分都不是必须的,可以省略。像其他编程语言来说,都有while循环语句,Go语言中没有while循环,但是可以通过for循环达到while的效果。在Go语言中,同样支持使用continue、break控制for循环:

  1. continue 可以跳出本次循环,继续执行下一次循环。

  2. Break 可以跳出整个for循环,即使for循环没有执行完,也会强制终止。

 i, sum := 1, 0
 for {
     sum += i
     i++
     if i>100{
         break
     }
 }
 fmt.Prinltn("the sum is", sum)

上述示例中使用的是没有任何条件的for循环,也称为for无限循环。使用break退出无限循环。

上一篇:C++ 6.程序流程结构—选择结构(嵌套if语句、经典问题三只小猪称体重、三目运算符、switch语句)


下一篇:Eureka的源码解析