if else条件语句

本节介绍Golang中的条件语句if elseif语句的语法如下:

if condition {

}

condition条件满足时执行大括号中的代码块。Golang比JavaScript等语言更严格,即使大括号中仅有一条语句,大括号也不能省略。

跟大多数编程语言类似,Golangif条件语句也支持else ifelse

if condition {

} else if condition {

} else {

}

当然,else if语句可以存在多个。

ifelse if任何一个条件判断通过时,执行对应的代码块得,否则就说明所有这些判断条件都不通过,那么就执行else对应的代码块。

我们写一个程序来判断一个数字是奇数还是偶数。

package main

import "fmt"

func main() {
    num := 10
    if num % 2 == 0 {
        fmt.Println("the number is even")
    } else {
        fmt.Println("the number is odd")
    }
}

Go Playground在线运行 这里的if num % 2 == 0语句判断num对2求模的余数是否是0。如果是,那么就打印"the number is even",否则就打印"the number is odd"。由于这里num赋值为10,是偶数,因此这段程序会打印the number is even

Golang中的if有个变体,可以在判断条件condition之前加一个语句,语法如下:

if statement; condition {

}

我们用这种写法重构下前面的程序。

package main

import "fmt"

func main() {
    if num:= 10; num % 2 == 0 {
        fmt.Println("the number is even")
    } else {
        fmt.Println("the number is odd")
    }
}

Go Playground在线运行 这种写法的不同点在于,num变量初始化是在if语句内完成的,因此num变量的作用域也仅限与if语句(当然也包括else)内,因此也就无法在该if else语句外访问num变量。

我们现在写一个程序来体验下else if的用法。

package main

import "fmt"

func main() {
    num := 99
    if num < 50 {
        fmt.Println("number is less than or equal to 50")
    } else if num >= 51 && num <= 100 {
        fmt.Println("number is between 51 and 100")
    } else {
        fmt.Println("number is greater than 100")
    }
}

Go Playground在线运行 这里由于num初始化赋值为99,因此num >= 51 && num <= 100条件判断通过,因此打印输出number is between 51 and 100

防坑指南

Golang中条件语句的else不能另起一行,必须跟在}符号后面,否则编译会报错。

package main

import "fmt"

func main() {  
    num := 10
    if num % 2 == 0 {
        fmt.Println("the number is even") 
    }  
    else {
        fmt.Println("the number is odd")
    }
}

Go Playground在线运行 这段代码里else子句没有紧跟在}符号后面,而是另起新的一行,因此会报错:

syntax error: unexpected else, expecting }

为什么会这样呢?原因是因为Golang会在位于行尾的}符号后面自动补一个分号,具体可以参考这里:https://golang.org/ref/spec#Semicolons

这时我们的代码会变成:

if num % 2 == 0 {  
      fmt.Println("the number is even") 
};  //semicolon inserted by Go
else {  
      fmt.Println("the number is odd")
}

由于if else一个完整的语句,在中间插入了;当然报错了。起初可能不太习惯,不过换个角度看,这一点反倒使得Golang的语法更加严格,要求大家写的代码也更加一致。

Last updated