分支结构-if
if语句形式
//单分支
if boolean_expression {
// 新分支 在布尔表达式为 true 时执行
}
//多分支
if boolean_expression1 {
// 分支1
} else if boolean_expression2 {
// 分支2
... ...
} else if boolean_expressionN {
// 分支N
} else {
// 分支N+1
}
if 关键字后面的条件判断表达式的求值结果必须是布尔类型,即要么是 true,要么是 false;if语句的几点建议
- 仅使用单分支控制结构;
- 当布尔表达式求值为 false 时,也就是出现错误时,在单分支中快速返回;
- 正常逻辑在代码布局上始终“靠左”,这样读者可以从上到下一眼看到该函数正常逻辑的全貌;
- 函数执行到最后一行代表一种成功状态。
func doSomething() error {
if errorCondition1 {
// some error logic
... ...
return err1
}
// some success logic
... ...
if errorCondition2 {
// some error logic
... ...
return err2
}
// some success logic
... ...
return nil
}
循环结构-for和for range
Go 语言中并没有其他语言的 while和 do while 循环,for 是 Go 语言唯一的循环语句。
//经典形式 第一个为初始化表达式或赋值语句;第二个为循环条件判定表达式;第三个为循环变量修正表达式,即此处的 post
for initialisation; condition; post {
// ...
}
//保留循环判断条件表达式
for condition {
// ...
}
//无限循环
for {
// ...
}
break 语句用于在完成正常执行之前突然终止 for 循环
for i := 1; i <= 10; i++ {
if i > 5 {
break //loop is terminated if i > 5
}
fmt.Printf("%d ", i)
}
continue 语句用来跳出 for 循环中当前循环,循环体会在一下次循环中继续执行。
for i := 1; i <= 10; i++ {
if i%2 == 0 {
continue
}
fmt.Printf("%d ", i)
}
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。
for i, v := range sl {
fmt.Printf i, v)
}
可忽略不想要的返回值,或 _ 这个特殊变量。
// 忽略value
for i := range sl {
// ...
}
// 忽略 index。
for _, v := range sl {
// ...
}
// 忽略全部返回值,仅迭代。
for range sl {
// ...
}
分支结构-switch
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。 Golang switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止。
switch var1 {
case val1:
...
case val2:
...
default:
...
}
switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。
switch x.(type){
case type:
statement(s)
case type:
statement(s)
/* 你可以定义任意个数的case */
default: /* 可选 */
statement(s)
}
参考资料
- 《Go 语言第一课》
- 《流程控制》