go语言中,else
语句必须在if
语句的右大括号后面的同一行中开始,否则编译器就会报错。这点跟其他c,java等语言是不一样的。
让我们通过一个程序来理解它。
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")
}
}
在上面的程序中,else
语句不在if
语句}
之后的同一行中开始。而是从下一行开始,这是不允许的,编译器会报错:
main.go:12:5: syntax error: unexpected else, expecting }
原因是Go自动插入分号的方式,有关分号插入规则的信息,参考: http://golang.org/doc/effective_go.html#semicolons
在规则中,如果分号是行最后的标记,则在}
之后插入分号。因此,在if语句的}
后面会自动插入分号。
所以程序实际上变成了
if num%2 == 0 {
fmt.Println("the number is even")
}; // go 自动插入分号
else {
fmt.Println("the number is odd")
}
if{...} else {...}
是一个整体,不应该在它的中间出现分号。因此,需要将else
放在结束}
之后的同一行中。
修改程序,将else
移到if
语}
之后,以防止自动插入分号。
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")
}
}