if condition1 {
// do something
} else if condition2 {
// do something else
} else {
// catch-all or default
}
注意:关键字 if 和 else 之后的左大括号{
必须和关键字在同一行,如果使用了 else if 结构,则前段代码块的右大括号}
必须和 else if 关键字在同一行,这两条规则都是被编译器强制规定的。
特殊写法:
例如Connect()
是一个带有返回值的函数,err := Connect()
是一个语句,执行 Connect()
后,将错误保存到 err
变量中。
err != nil
才是 if 的判断表达式,当 err
不为空时,打印错误并返回。
if err := Connect(); err != nil {
fmt.Println(err)
return
}
Go语言改进了 switch 的语法设计,case 与 case 之间是独立的代码块,不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行
var a = "hello"
switch a {
case "hello":
fmt.Println(1)
case "world":
fmt.Println(2)
default:
fmt.Println(0)
}
一分支多值
var a = "mum"
switch a {
case "mum", "daddy":
fmt.Println("family")
}
分支表达式
var r int = 11
switch {
case r > 10 && r < 20:
fmt.Println(r)
}
fallthrough
fallthrough
可以实现穿透的效果,从当前case块穿透到下一个case并执行,一次只能穿透一层
a := 1
switch a {
case 1:
fmt.Println("1")
fallthrough
case 2:
fmt.Println("2")
}
/*
1
2
*/
Go语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构,关键字 for 的基本使用方法与C/C++非常接近
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
注意:左花括号{
必须与 for 处于同一行。
死循环:
for{
fmt.Println("hello")
}
Go语言的 for 循环同样支持 continue 和 break 来控制循环,但是它提供了一个更高级的 break和continue,可以选择中断或重新开始哪一个循环
JLoop:
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break JLoop
}
fmt.Println(i)
}
}
只有循环条件:
var i int
for i <= 10 {
i++
}
Go语言中 goto 语句通过标签进行代码间的无条件跳转,同时 goto 语句在快速跳出循环、避免重复退出上也有一定的帮助,使用 goto 语句能简化一些代码的实现过程。
package main
import (
"fmt"
)
func main() {
i := 0
for {
i++
fmt.Println(i)
if i == 5 {
goto myFlag
}
}
myFlag:
fmt.Println("done")
}