package main
import "fmt"
func test1() bool {
fmt.Println("test1...")
return true
}
func main() {
//todo:&&短路与 和 ||短路非
//只会打印"wowowo"
if 10 < 9 && test1() { //判断到10<9是false后,由于是&&,就不会再判断test()了
fmt.Println("hahaha")
} else {
fmt.Println("wowowo")
}
//只会打印"xixixi"
if 10 > 9 || test1() { //判断到10>9是true,由于是||,就不会再判断test()了
fmt.Println("xixixi")
}
//会打印test1...和yayaya
if 10 < 9 || test1() { //判断10<9是false,由于是|| 于是接着判断test1()
fmt.Println("yayaya")
}
//会打印test1...和wuwuwu
if 10 > 9 && test1() { //判断10>9是true,由于是&& 于是接着判断test1()
fmt.Println("wuwuwu")
}
//todo:多分支结构的陷阱 一下例子中只会打印ok1,两个else根本不会被执行,即if else多分支只会执行一个分支
n := 10
if n > 9 {
fmt.Println("ok1")
} else if n > 6 {
fmt.Println("ok2")
} else if n > 3 && n < 11 { //todo:不能写成 n>3,n<11 也不能写成 3<n<11
fmt.Println("ok3")
}
//todo:if else 多分支不同于 多if,多if的每一个if语句块均会按序执行,下面例子的ok1、ok2、ok3均会打印
m := 10
if m > 9 {
fmt.Println("ok1")
}
if m > 6 {
fmt.Println("ok2")
}
if m > 3 {
fmt.Println("ok3")
}
//todo:if 流程中允许if和大括号之间有赋值语句,且该变量作用域只在if语块中;
if p := 10; p > 6 {
fmt.Println("ok4") //会打印 ok4 //todo:if的大括号内也可以申明变量,其作用域也只在if语块内
}
//todo:在if语块外申明的变量在if语块内也可以使用
num := 99
if num%9 == 0 {
num /= 9
fmt.Println("num=", num) //num=11
}
fmt.Println("num=", num) //num=11
}