第八篇 if else语句
欢迎来到Golang教程系列的第八篇
if是一个布尔条件语句,当条件为true时,它执行if程序块的代码,当条件为false时,执行的是else程序块的代码。在这个教程中,我们会看到使用if语句的不同语法和方法。
if语句语法
if语句的语法如下所示:
if condition {
}
如果condition为true, 花括号里的代码将会执行。
跟其它类似C语句的编程语言不一样,花括号{}是必须要有的,即使在花括号{}之间没有一行代码。
例子
让我们写一个简单的例子判读一个数是奇数还是偶数。
package main
import (
"fmt"
)
func main() {
num := 10
if num%2 == 0 {
fmt.Println("The number", num, "is even")
return
}
fmt.Println("The number", num, "is odd")
}
在上面的程序中,条件num%2是获取num除于2的余数是否等于0。在上面的例子中,是等于0,所以打印出The number is even。
if else语句
if语句有一个可选的else结构,如果if语句条件为false时,那么它将会执行。
if condition {
} else {
}
上面的片段,如果condition判断为false,那么else{和}之间的代码块将会被执行。
让我们写一个程序用if else语句判断一个数是奇数还是偶数
package main
import (
"fmt"
)
func main() {
num := 11
if num%2 == 0 { //判断结果是否偶数
fmt.Println("The number", num, "is even")
return
}
fmt.Println("The number", num, "is odd")
}
上面的代码中,condition并不像上一节返回true,我们创建的else语句将会在condition为false时执行。在上面的例子中,因为11是奇数,condition计算返回不为0,则是false,else语句中的代码将被执行。上面的程序将会输出
The number 11 is odd
if...else if...else语句
if语句还有其它可选部分else if和else。下面提供了相同的语法。
if condition1 {
...
}else if condition2 {
...
}
条件语句是从上到下进行真值判断。
上面的语句中,如果condition1为真时,那么if condition1 {和}之间的代码将会执行。
如果condition1为false且condition2为true时,else if condition2 {和}之间的代码将被执行。
如果condition1和condition2都为false时,那么最后一行的else{和}之间的代码将被执行。
else if可以有多个的。
一般地,无论if或else if的条件语句为真时,其相应的代码块就会执行。如果所有条件语句都为空,那么else代码块就被执行
让我们用else if写一段代码。
package main
import (
"fmt"
)
func main() {
num := 99
if num <= 50 {
fmt.Println(num, "is less than or equal 50")
}else if num >= 51 && num <= 100 {
fmt.Println(num, "is between 51 and 100")
}else {
fmt.Println(num, "is greater than 100")
}
}
在上面的程序中,条件else if num >= 51 && num <= 100为true,所以程序将会输出
99 is between 51 and 100
带有赋值的if
还有一种if包含了可选的简短赋值语句,它是在判断条件语句之前执行的。它的语法如下:
if assigment-statement; condition {
}
在上面的片段中, assigment-statement是在判断语句之前执行的。
让我们用上面的语法重写判断一个数是偶数还是奇数的程序。
package main
import (
"fmt"
)
func main() {
if num := 10; num % 2 == 0 {
fmt.Println(num,"是偶数")
} else {
fmt.Println(num,"是奇数")
}
}
在上面的程序中,num是在if语句中初始化。有一件事需要注意的是num是一个变量,但只能在if和else之间访问,也就是说num的限制范围是if``else模块。如果我们想要在if``else之外的地址访问num,编译就会报错。这个语法在if else结构中使用声明变量时非常便利。使用这个语法,要确保变量的范围要在if else语句之内。
Gotcha
else语句应该放在if语句结束花括号的同一行,否则编译时就会报错。
让我们通过下面的程序来说明。
package main
import (
"fmt"
)
func main() {
if num := 10; num % 2 == 0 {
fmt.Println(num,"是偶数")
}
else {
fmt.Println(num,"是奇数")
}
}
上面的程序中,else语句并没有跟if语句的结束花括号同一行,而是在另外一行开始。这在Go中是不允许的。如果你运行程序,编译器就会抛出错误。
./main.go:12:2: syntax error: unexpected else, expecting }
原因是因为Go会自动插入分号。你可以了解更多分号插入规则这里: https://golang.org/ref/spec#Semicolons.
在规则里,会在终止大括号}后面插入分号.如果它是一行最后的标记,那么Go编译器会自动在if语句的终止大括号}后面插入分号。
所以我们的程序就会变成这样。
...
if num%2 == 0 {
fmt.Println("the number is even")
}; // go编译器会自动插入分号
else {
fmt.Println("the number is odd")
}
上面的片段中,编译器会在if的终止大括号后面加上分号。
因为if{...} else {...}是一个语句,一个分号不应该出现在它们中间。因此,这个程序会编译失败。所以,把else放在与if的终止大括号}同一行是语法需要。
下面的程序就是正常的,else紧跟着if的终止大括号}。
package main
import (
"fmt"
)
func main() {
if num := 10; num % 2 == 0 {
fmt.Println(num,"是偶数")
}else {
fmt.Println(num,"是奇数")
}
}
上面的程序就会正常编译。
在Go中的习惯
我们已经看到了if-else的不同结构。实际上,我们有多种不同的方法来写同样的程序。例如,我们已经看到了有多种方法用if else来写一个程序检查一个数是奇数还是偶数。哪一种是在Go中比较惯用的呢?
在Go的哲学体系,最好的就要避免不必要的分支和代码依赖,尽早返回数据,下面我提供了上一节的程序。
package main
import (
"fmt"
)
func main() {
if num := 10; num % 2 == 0 {
fmt.Println(num,"是偶数")
}else {
fmt.Println(num,"是奇数")
}
}
在Go的哲学中,惯用的方法是避免else,尽量在在if条件为真时返回。
package main
import (
"fmt"
)
func main() {
num := 10;
if num%2 == 0 { //checks if number is even
fmt.Println(num, "is even")
return
}
fmt.Println(num, "is odd")
}
在上面的程序中,我们要尽快找出数字时偶数,然后立即返回。这就避免不必要的else代码分支,这就是在Go中所做的方法。在编写Go程序时,随时都要留意这一点。
以上就是本篇的全部,感谢阅读,这是我第一次翻译,难免会有翻译不当的地方,如果有什么反馈和评论,欢迎提出来!
浙公网安备 33010602011771号