if bool_condition { // 新分支 } // 原分支如果布尔变量或布尔表达式为 true ,则进入新分支执行,否则会继续按照原分支的代码去执行。
单分支的用法,如果布尔表达式成立,则执行新分支的代码,然后继续执行原分支的代码,否则执行原分支的代码,下面是代码示例:
import "fmt" func main() { num := 3 if num > 2 { fmt.Println("num 大于 2") } fmt.Println("原分支代码") }打印结果
num 大于 2 原分支代码因为 num > 2 因此,程序运行之后,会执行新分支的打印语句以及原分支的打印语句。除了单个布尔表达式以外,还可以加入 && 或 || 条件运算符进行条件的组合,例如:
import "fmt" func main() { num := 3 if num > 2 && num < 10 { fmt.Println("num 大于 2 并且 num 小于 10") } fmt.Println("原分支代码") }
import "fmt" func main() { age := 18 if age == 18 { fmt.Println("您已满18岁") } else { fmt.Println("您未满18岁") } fmt.Println("www.duidaima.com原分支代码") }执行结果:
您已满18岁 www.duidaima.com原分支代码age 的值为 18,因此会执行第一个分支的里打印语句,然后继续执行原分支的打印语句。
import "fmt" func main() { name := "小明" if name == "小红" { fmt.Println("您好,小红!") } else if name == "小明" { fmt.Println("您好,小明!") } else { fmt.Println("您好,陌生人!") } fmt.Println("www.duidaima.com原分支代码") }执行结果:
您好,小明! www.duidaima.com原分支代码程序根据布尔表达式条件的值,选择了第二个分支去执行代码。
import "fmt" func main() { mp := map[string]string{"name": "cmy"} if name, ok := mp["name"]; ok { fmt.Printf("存在 key → name:%s\n", name) } else { fmt.Println("key 不存在") } fmt.Println("原分支代码") }在 if 语句中定义 name,ok 变量,使用 ok 判断 key 是否存在,如果存在则执行分支里的代码。
switch T { case value1: // 分支 1 case value2, value3, ...: // 分支 2 ... default: // 默认分支 }T 可以是常量、变量和布尔表达式等,case 关键字后面的 value 类型,必须与 T 的类型是一致的,且 value 是唯一的。Go 会根据 T 的值与各个 case 后面的 value 进行匹配,匹配成功则执行对应 case 分支,case 后面可以有多个 value。default 为默认分支,可有可无,如果前面的 case 都没匹配上,则会执行 default 分支。
import "fmt" func main() { name := "小明" if name == "小红" { fmt.Println("您好,小红!") } else if name == "小明" { fmt.Println("您好,小明!") } else { fmt.Println("您好,陌生人!") } fmt.Println("原分支代码") }上面的代码,可以使用 switch 分支改造:
import "fmt" func main() { name := "小明" switch name { case "小明": fmt.Println("您好,小明!") case "小红": fmt.Println("您好,小红!") default: fmt.Println("您好,陌生人!") } fmt.Println("www.duidaima.com原分支代码") }执行结果:
您好,小明! www.duidaima.com原分支代码name 等于 小明,与第一个 case 分支匹配成功,执行这个分支的代码,然后继续执行原分支的代码。
import "fmt" func main() { switch { case 1+1 != 2: fmt.Println("1 + 1 不等于 2") case 1+1 == 2: fmt.Println("1 + 1 等于 2") default: fmt.Println("0") } fmt.Println("原分支代码") }当 switch 后面什么都没有时,程序会根据 case 后面布尔表达式的值进行分支的选择。
import "fmt" func main() { mp := map[string]string{"name": "cmy"} switch name := mp["name"]; name { case "cmy": fmt.Println("cmy") case "kk": fmt.Println("kk") default: fmt.Println("unknown") } fmt.Println("原分支代码") }fallthrough
import "fmt" func main() { mp := map[string]string{"name": "cmy"} switch name := mp["name"]; name { case "cmy": fmt.Println("cmy") fallthrough case "kk": fmt.Println("kk") default: fmt.Println("unknown") } fmt.Println("www.duidaima.com原分支代码") }执行结果:
cmy kk www.duidaima.com原分支代码在第一个 case 分支后面使用了 fallthrough,不论下一个 case 是否与 cmy 匹配,都会执行这个分支的代码。