if
是具有布尔条件的语句,如果该条件的计算结果为 true
,它将执行代码块。如果条件计算结果为 false
,它将执行备用 else 块。**在本教程中,我们将了解使用 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
计算结果为 ,则将执行该构造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 condition1 {
...
} else if condition2 {
...
} else {
...
}
从上到下评估条件的真实性。
在上面的语句中,如果为 true,则执行其中的``condition1`代码行里面的内容。
如果condition1
是false 和condition2
是true,则执行condition2
代码行里面的内容。
如果两者都为 false,则执行else
的语句中的代码行里面的内容。
可以有任意数量的语句。else if
通常,无论 if
或 if
的条件计算结果为 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 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语言循环语句