if 条件 1 {
分支 1
} else if 条件 2 {
分支 2
} else if 条件 ... {
分支 ...
} else {
分支 else
}
注:
eg:
score:=70
if score > 90{
fmt.Println("优秀")
}else if score >80{
fmt.Println("良好")
}else{
fmt.Println("差")
}
switch 表达式 {
case 表达式1:
代码块
case 表达式2:
代码块
case 表达式3:
代码块
case 表达式4:
代码块
case 表达式5:
代码块
default:
代码块
}
eg:
func main() {
education := "本科"
switch education{
case "研究生":
fmt.Println("是研究生")
case "本科":
fmt.Println("是研究生")
case "高中":
fmt.Println("是高中生")
default:
fmt.Println("学历未达标")
}
}
或
的关系,用逗号相隔。 month := 2
switch month{
case 3,4,5:
fmt.Println("春天")
case 6,7,8:
fmt.Println("夏天")
case 9,10,11:
fmt.Println("秋天")
default:
fmt.Println("未知")
}
score:=90
switch judge(score){
case true:
fmt.Println("成绩合格")
case false:
fmt.Println("成绩不合格")
}
for [condition | ( init; condition; increment ) | Range]
{
statement(s);
}
for 后可接三种类型表达式
func main() {
a:=1
for a<= 5{
fmt.Println(a)
a++
}
}
;
分隔 for a:=1 ; a<=5 ;a++{
fmt.Println(a)
}
myarr := [...]string{"apple","orange","pair"}
for index,fruit := range myarr{
/*
0号的水果为apple
1号的水果为orange
2号的水果为pair
*/
fmt.Printf("%d号的水果为%s\n",index,fruit)
}
// for _,fruit := range myarr
func main() {
i:=1
for{
if i>5{
break
}
//1 2 3 4 5
fmt.Printf("%d ",i)
i++
}
}
defer 的用法很简单,只要在后面跟一个函数的调用,就能实现将这个 xxx 函数的调用延迟到当前函数执行完后再执行。
func testfun(){
fmt.Println("B")
}
func main() {
defer testfun()
fmt.Println("A")
}
/*
A
B
*/
使用 defer 只是延时调用函数,此时传递给函数里的变量,不应该受到后续程序的影响。
func main() {
name := "fruit"
defer fmt.Println(name)
//后续调用 defer 的时候,仍然使用未重新赋值的变量值,就好在 defer 这里,给所有的这是做了一个快照一样。
name = "roast chicken"
fmt.Println(name)
}
/*
roast chicken
fruit
*/
多个defer 是反序调用的,有点类似栈一样,后进先出。
func main() {
name := "fruit"
defer fmt.Println(name)
name = "roast chicken"
defer fmt.Println(name)
name = "cabbage"
defer fmt.Println(name)
}
/*
cabbage
roast chicken
fruit
*/
eg:
若是没有 defer,你可以写出这样的代码
func f() {
r := getResource() //0,获取资源
......
if ... {
r.release() //1,释放资源
return
}
......
if ... {
r.release() //2,释放资源
return
}
......
if ... {
r.release() //3,释放资源
return
}
......
r.release() //4,释放资源
return
}
使用了 defer 后,代码就显得简单直接,不管你在何处 return,都会执行 defer 后的函数。
func f() {
r := getResource() //0,获取资源
defer r.release() //1,释放资源
......
if ... {
...
return
}
......
if ... {
...
return
}
......
if ... {
...
return
}
......
return
}