【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退出无限循环。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 任何 PHP 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,甚至一个什么也不做的...
    dptms阅读 1,055评论 0 3
  • 在任何一门设计语言中,都需要支持满足程序结构化所需要的三种基本结构、顺序结构、分支结构(选择结构或条件结构)和循环...
    楠哥哥_0b86阅读 419评论 0 0
  • 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。 Go语言中最常用的流...
    羋学僧阅读 282评论 0 2
  • 1.概述 代码的执行顺序,有 3 大类,为: 顺序,从上到下依次执行,基础流程(核心流程) 循环,某段代码重复执行...
    如逆水行舟不进则退阅读 374评论 0 1
  • 原文链接 http://ironxu.com/696 学习 A Tour of Go (中文参考 Go 之旅中文 ...
    好刚编程阅读 344评论 0 2