[奔跑的 Go] 教程四、Go 语言中的条件语句和循环(if..else..loop)
程序必须是为了供人阅读而编写的,只是附带让机器执行。— Harold Abelson
✱ If/else 条件语句
Go 提供了我们熟悉的 if/else
语句的 if
,if-else
,if-**else if**-else
变体。它用于检查条件,并在条件为 true
或 false
时执行一些代码。
☛ if
条件
if
条件的示例如下图。 与大多数程序语言不同, Go 不允许在 ()
内写 条件
。
https://play.golang.org/p/Tk2iWdJfvM6
不同于
*JavaScript*
或者*C*
语言,即使在*{...}*
中只有一个条件, 也必须使用大括号*{}*
。
☛ if - else
条件
在 if-else
条件语句中,如果 if
条件不满足,将会执行 else
代码块。
https://play.golang.org/p/JWN4l7gca0w
需要特别注意的是 else
语句必须和 if
语句的结束大括号 }
在同一行。如果将 else
语句放在新的一行中,Go 将会自动在 if
的结束大括号 }
的后面添加一个 ;
,这将会引起编译错误。下面的写法就是典型的错误。
if condition {} // implicit ;
else {}
☛ if — else if — else
else if
用于当你想尝试多种情况时。
https://play.golang.org/p/0QBnYnxDIE0
首先,if
条件将被求值,如果条件为真,则 if
块内的代码将被执行,并且不再求值其他条件。但如果 if
条件不满足,则对每一个 else if
条件进行求值,直到没有条件满足为止。如果没有一个条件满足,else
块将被执行。
☛ 初始语句
可以在 if
条件求值之前执行初始语句。
if statement; condition {
...
}
这可以方便地初始化条件变量,并将该变量的作用域限制为 if-else
块。
https://play.golang.org/p/k0lZ7xpiUrK
选择条件
Go不支持三元运算符,也没有明确的方式来实现类似三元运算符的情况
✱ Switch 条件语句
switch
语句可以用来代替多个if-else
条件语句.
☛ switch
语法
switch
需要获取一个输入值,根据输入值在多个case
中来寻求匹配项。与C
不同的是,Go
不需要在每个case
代码块上以break
来代表语句的结束,而是在case
代码块中最后一条语句执行完自动结束。Go不允许有重复的case值.
switch input {
case value_1:
...
case value_1:
...
}
接下来是一个简单的例子:通过手指的序号来找出手指的名字。
https://play.golang.org/p/-7qgbsnG6MH
switch
接收变量finger
的输入值,找到与finger
的值相匹配的case
代码块。上面的程序可以看出,当finger == 2
的时候, case 2
下面的代码块将会被执行,并且打印出 Index
.
如果
*finger*
的值不在1-5之间,将不会有任何打印输出。
☛ default
case
有时候,我们需要使用else
来表示不满足所给出条件的情况。同样的在switch
中,使用default
来代表不匹配所给出的case
的情况下要执行的代码块。
https://play.golang.org/p/OUH42meLgrZ
上面的程序表示,由于输入变量finger
的值是6,不匹配任何一个case
的值,这时候default
代码块将会执行,打印出 No fingers matched
。
*default*
不是必须要放在所有的case
之后,可以放在*switch*
代码块任何独立的行。
☛ 多个 case 值
你可以使用多个(,
)分割的 case 值来匹配输入的 switch
值。
https://play.golang.org/p/G6bJqNytCYU
上面的程序将打印 Letter is a vovel
,因为变量 letter
有值 i
,它属于 case 值 "a", "e", "i", "o", "u"
。
☛ 初始语句
还有另一种 switch
语句,您可以在输入值之前添加初始语句,就像 if
条件语句一样。
switch statement; input {
...
}
让我们看看前面的例子,在本例中,我们将在 switch
语句本身中定义 letter
变量,将其作用域限制为 switch
块。
https://play.golang.org/p/-5ywgULjkmU
☛ 无表达式的 switch
Go 的 switch
语句中的输入值是可选的。当 switch
语句没有输入值时,case
将是一个返回布尔值的表达式。
https://play.golang.org/p/Jwvp2oPPsL-
由于 number
大于20,number > 5
将满足,number is greater than 5
将打印在屏幕上。
我们可以使用初始语句,而不需要输入 switch
语句的值。在上面的程序中,我们可以在 switch
语句中初始化 number
变量。
https://play.golang.org/p/5RPq2LRq5Xw
在初始语句之后必须有一个分号,因为如果我们不添加分号,那么我们的 switch
语句将不再是无表达式的,而number:= getnumber()
将成为无效的输入值表达式。
☛ fallthrough
语句
与通常情况一样,当执行 case
块时,不会尝试其他情况。在上面的程序中,数字大于 5、10 和 15,但是因为 number > 5
和第一个 case
满足这个条件,所以只执行那个 case
块。要执行其他匹配的 case
块,我们使用 fallthrough
语句。
https://play.golang.org/p/2I26lUeyvMk
当一个 case
条件满足并且 case
块被求值,如果编译器找到 fallthrough
语句,下一个 case
块将被求值为相同的条件。fallthrough
应该是一个 case 块中的最后一个语句,否则 go 编译器会抛出 fallthrough statement out of place
的错误。
*fallthrough*
语句不允许在最后一个*case*
块,因为没有下一步的条件执行
✱ For 循环
不像 C
和其他的编程语言,Go 中唯一可用的循环就是 for
循环。但是 Go 的 for
循环有很多个变体,来针对不通的业务场景。 接下来,我们就看下各种 for
循环。
☛ for
循环的语法
for
循环的语法是有三个语句组成的,并且每个语句都是可选的。
for init; condition; post {
...
}
init
语句用来初始化condition
检查语句 或者post
语句中需要用到的所有的变量。当for
循环一旦被调用,init
语句就被调用。condition
语句用来表示for
循环执行的条件。 如果condition
条件里返回的是true
,就会执行for
循环体的代码。for
循环内的代码执行完一次之后,就会执行post
语句中的代码。在post
语句中,可以init
语句中任何变量的值。在执行完post
语句中的代码之后,会执行condition
语句。如果condition
条件返回的是true
, 则继续执行循环体里的代码。否则中断循环。
下面,我们展示一个 demo:
https://play.golang.org/p/yLbkwjoAnAZ
在上面的程序中,将打印出1–6。
☛ for
循环的变体
如前所述,for
循环中的所有三个语句都是可选的。
可选的 post 语句: 我们可以删除 post
语句,并在 for
循环代码中执行,以获得相同的结果。
https://play.golang.org/p/5EIX8Xiec1E
可选的 init 语句: 我们也可以删除 init
语句并在 for
循环外执行。但在本例中,变量 i
将在 for
循环外部可访问。
https://play.golang.org/p/Mb47z3-1vF2
可选的init和post语句: 我们只能使用 条件
检查语句。在这种情况下,可以去掉所有的分号,Go 会把这个语句看作 condition
语句。这就像 C
语言中的 while
循环。
https://play.golang.org/p/-ZNjxR1CiBI
无语句: 由于所有 for
循环语句都是可选的,让我们看看它是如何工作的。没有任何语句的 for
循环是 for
循环, condition
语句始终为真,因此它将无限循环,除非从 for
循环代码中手动终止。
https://play.golang.org/p/ClkdbtaPPy1
上面的代码将输出与前面任何示例相同的结果,但是这一次我们必须使用 break
语句来终止循环,否则编译器将输出所有可能输出的数字。
☛ break
语句
break 语句通常用于中断并跳出 for 循环, break 语句之后的任何语句都不会被执行。
https://play.golang.org/p/Vvl982ZSj45
在上面的范例程序中,当变量 i 大于 6时,if 条件满足并执行了 break 语句,此时将会立即中断并跳出 for 循环
☛ continue
语句
continue
语句用于跳过一个 for
循环迭代。当 for
循环看到 continue
语句时,它只是忽略当前迭代,执行 post
语句,然后重新开始。一个简单的例子是只打印1-10之间的偶数。
https://play.golang.org/p/LWojeN3YT6o
☛ return
语句
若 for
循环遇到 return
语句,函数将停止执行。因此,return
不是 for
循环特有的。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: