8、if else

129 阅读1分钟

本文为译文。原文地址:if else

由于本文整体概念比较简单,所以译者主要翻译一些go里独有的一些语法点。其余的和其他语言没啥两样。如有需要可以直接看原文。

if声明语法

if condition {  
}

package main

import (  
    "fmt"
)

func main() {  
    num := 10
    if num%2 == 0 { //checks if number is even
        fmt.Println("The number", num, "is even")
        return
    }
    fmt.Println("The number", num, "is odd")
}

if else 声明

if condition {  
} else {
}

package main

import (  
    "fmt"
)

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

If ... else if ... else statement

if condition1 {  
    ...
} else if condition2 {
    ...
} else {
    ...
}

赋值if语句

如果if声明中,存在多个赋值语句。先顺序执行赋值语句,然后再进行条件判断。

声明的变量的作用域只限于if else空间。

if assignment-statement; condition {  
}

gotcha

else声明块必须和if块结尾的}相连。不然会报错。这是因为**go会自动的插入分号。**可以参考go插入分号的规则golang.org/ref/spec#Se…

package main

import (  
    "fmt"
)

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

./prog.go:12:5: syntax error: unexpected else, expecting }

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

go的惯用写法

我们之前的例子是这样的

package main

import (  
    "fmt"
)

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

go的开发哲学中,需要避免不重要的开发分支和不必要的缩进。当满足条件时应该尽早的返回数据。代码优化如下

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")

}