后端与 Golang | 青训营笔记

68 阅读2分钟

这是我参与第五届青训营笔记创作活动的第1天、

  • Golangfor支持三种循环方式,包括类似while的语法。
for init; condition; post { }
for condition { }
for { }
init: 一般为赋值表达式,给控制变量赋初值;
condition: 关系表达式或逻辑表达式,循环控制条件;
post: 一般为赋值表达式,给控制变量增量或减量。
for语句执行过程如下:
先对表达式 init 赋初值;
判别赋值表达式 init 是否满足给定 condition 条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。   
  • 在 for 循环中嵌套一个或多个 for 循环
for [condition |  ( init; condition; increment ) | Range]
{
   for [condition |  ( init; condition; increment ) | Range]
   {
      statement(s)
   }
   statement(s)
}  
  • for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环
package main

func main() {
    s := "abc"
    // 忽略 2nd value,支持 string/array/slice/map。
    for i := range s {
        println(s[i])
    }
    // 忽略 index。
    for _, c := range s {
        println(c)
    }
    // 忽略全部返回值,仅迭代。
    for range s {

    }

    m := map[string]int{"a": 1, "b": 2}
    // 返回 (key, value)。
    for k, v := range m {
        println(k, v)
    }
}   
  • 两者异同

for可以 遍历array和slice 遍历key为整型递增的map 遍历string for range可以完成所有for可以做的事情,却能做到for不能做的,包括 遍历key为string类型的map并同时获取key和value 遍历channel

  • GotoBreakContinue
1.三个语句都可以配合标签(label)使用
2.标签名区分大小写,定以后若不使用会造成编译错误
3.continuebreak配合标签(label)可用于多层循环跳出
4.goto是调整执行位置,与continuebreak配合标签(label)的结果并不相同  
  • if…else 语句 if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。