Go从入门到放弃10--控制结构

121 阅读2分钟

分支结构-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)
}

参考资料