Go语言条件语句

if 是具有布尔条件的语句,如果该条件的计算结果为 true,它将执行代码块。如果条件计算结果为 false,它将执行备用 else 块。**在本教程中,我们将了解使用 if 语句的各种语法和方法。

if 语句语法

下面提供了该语句的语法

if condition {  
}

如果为 true,则执行大括号和之间的代码行。condition{}

示例

让我们编写一个简单的程序来找出一个数字是偶数还是奇数。

package main

import (  
    "fmt"
)

func main() {  
    num := 10
    if num%2 == 0 { 
        fmt.Println("这数是偶数", num)
        return
    }
    fmt.Println("这数是奇数", num)
}

Run in Playground

在上面的程序中,第 1 行的条件num%2。判断num除以2的余数是否为零。将打印上面的程序。

这数是偶数 10

数 10

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("这数是偶数", num)
    } else {
        fmt.Println("这数是奇数", num)
    }
}

Run in Playground

在上面的代码中,我们没有像第一个示例代码中那样返回,而是创建了一条else如果条件为false 则执行的语句。在本例中,由于11是奇数,因此 if 条件是false,并且执行else语句中的代码行。将打印上面的程序。

这数是奇数 11

If … else if … else 语句

if 语句还有可选的else ifelse组件。下面提供了相同的语法

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

从上到下评估条件的真实性。

在上面的语句中,如果为 true,则执行其中的``condition1`代码行里面的内容。

如果condition1 是false 和condition2 是true,则执行condition2 代码行里面的内容。

如果两者都为 false,则执行else的语句中的代码行里面的内容。

可以有任意数量的语句。else if

通常,无论 ifif 的条件计算结果为 true,都会执行相应的代码块。 如果所有条件都不为真,则执行其他块。

让我们编写一个使用 .else if

package main

import (  
    "fmt"
)

func main() {  
    num := 99
    if num <= 50 {
        fmt.Println( "这数小于等于50",num)
    } else if num >= 51 && num <= 100 {
        fmt.Println("这数在51到100之间",num)
    } else {
        fmt.Println("这数大于100",num)
    }
}

Run in Playground

在上面的程序中,

这数在51到100之间 99

If with assignment

还有一个变体,其中包括在评估条件之前执行的可选速记赋值语句。它的语法是

if assignment-statement; condition {  
}

在上面的代码片段中,assignment-statement首先在评估条件之前执行。

让我们重写程序,该程序使用上述语法查找数字是偶数还是奇数。

package main

import (  
    "fmt"
)

func main() {  
    if num := 10; num % 2 == 0 {
        fmt.Println(num,"是偶数") 
    }  else {
        fmt.Println(num,"是奇数")
    }
}

Run in Playground

在上面的程序中,num在第 1 行的语句中进行了初始化 10,然后执行条件判断

当我们仅出于构造目的声明变量时,此语法通常会派上用场。在这种情况下使用此语法可确保变量的范围仅在if else语句内。

错误使用

该语句应在 if 语句的右大括号之后的同一行开始。如果没有,编译器会抱怨。else``}

让我们通过程序来理解这一点。

package main

import (  
    "fmt"
)

func main() {  
    num := 10
    if num % 2 == 0 { 
        fmt.Println("这数是偶数") 
    }  
    else {
        fmt.Println("这数是奇数")
    }
}

Run in Playground

在上面的程序中,在第 11 行的 if 语句关闭后,语句不会在同一行开始。相反,它从下一行开始。这在 Go 中是不允许的。

如果运行此程序,编译器将输出错误,else }

.\main.go:12:2: syntax error: unexpected else, expected }

原因是因为 Go 自动插入分号的方式。您可以在此处阅读分号插入规则 https://golang.org/ref/spec#Semicolons。

在规则中,指定在右大括号后插入分号,如果这是该行的最后一个标记。因此,Go 编译器会自动在第 11 行的 if 语句右大括号之后插入分号。}``}

所以我们的程序实际上变成了

...
if num%2 == 0 {  
      fmt.Println("the number is even") 
};  //由Go语言编译器增加
else {  
      fmt.Println("the number is odd")
}

分号插入后。编译器会在上述代码片段的第 4 行插入一个分号。

由于是一个单一的语句,因此分号不应出现在其中。因此,该程序无法编译。因此,语法要求将 放在 if 语句的右大括号之后的同一行中。if{...} else {...}else{...}

我通过在 if 语句关闭后移动 else 来重写程序,以防止自动插入分号。}

package main

import (  
    "fmt"
)

func main() {  
    num := 10
    if num%2 == 0 {
        fmt.Println("这数是偶数") 
    } else {
        fmt.Println("这数是奇数")
    }
}

Run in Playground

现在编译器会很高兴,我们😃也是.

惯用语法

我们已经看到了各种if-else结构,事实上我们已经看到了编写同一程序的多种方法。

例如,我们已经看到了多种编写程序的方法,该程序使用不同的结构检查数字是偶数还是奇数。哪一个是 Go 中编码的惯用方式?

**在 Go 的规范中,最好避免不必要的分支和代码缩进。尽早返回也被认为是更好的。

我已经提供了下面上一节中的程序,if else

package main

import (  
    "fmt"
)

func main() {  
    if num := 10; num % 2 == 0 {
        fmt.Println(num,"是偶数") 
    }  else {
        fmt.Println(num,"是奇数")
    }
}

Run in Playground

在 Go 的规范中编写上述程序的惯用方法是避免 else 并从条件为真时返回

package main

import (  
    "fmt"
)

func main() {  
    num := 10;
    if num%2 == 0 { 
        fmt.Println(num, "是偶数")
        return
    }
    fmt.Println(num, "是奇数")

}

Run in Playground

在上面的程序中,一旦我们发现数字是偶数,我们就会立即返回。这避免了不必要的 else 代码分支。这就是在 Go 规范中做事的方式。在编写 Go 程序时,请记住这一点。
上一教程 Go语言函数和包介绍
下一教程 Go语言循环语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值