Go 语言的流程控制

117 阅读2分钟

前端尝试转GO学习(第六天)

条件判断 if

根据情况不同,程序执行的分支不同。if 的语法结构,在编译器中表达式两侧可以写小括号,也可以省略。if 语法结构中所有表达式最终结果都是bool类型,true代表成立执行对应代码。

// 单独使用
if 表达式 {

}

if 单独使用

func main() {
    score := 65

    // 只影响到自己对应的代码块
    if score >= 60 {
        fmt.Println("及格")
    }
}

if 表达式中声明变量,变量的使用范围仅限于在 if 中能够使用。

func main() {
   if score := 60; score >= 60 {
      fmt.Println("及格")
   }
}

多个单独 if 使用时相互没有影响。

func main() {
    score := 65

    if score >= 60 {
        fmt.Println("及格")
    }
    if score < 60 {
        fmt.Println("不及格")
    }
}

if ... else 结构

func main() {
    score := 59
    if score >= 60 {
        fmt.Println("及格")
    } else{
        fmt.Println("不及格")
    }
}

if 多重嵌套

if 每种结构都可以相互嵌套。理论讲 if 可以很多层嵌套。

func main() {
   score := 77
   if score >= 60 {
      if score >= 60 && score < 70 {
         fmt.Println("及格")
      }
      if score >= 70 && score < 80 {
         fmt.Println("中等")
      }
      if score >= 80 && score < 90 {
         fmt.Println("良好")
      }
      if score >= 90 && score <= 100 {
         fmt.Println("优秀")
      }
   } else {
      fmt.Println("不及格")
   }
}

if ... else if .... else结构

当需要判断多个条件时使用这种结构,这个结构是一个整体。只要有一个条件成立后面的都不判断,立即结束。else可以没有。

func main() {
    score := 77
    if score >= 90 {
        fmt.Println("优秀") 
    } else if score >= 80 {
        fmt.Println("良好")
    } else if score >= 70 {
        fmt.Println("中等")
    } else if score >= 60 {
        fmt.Println("及格")
    } else {
        fmt.Println("不及格")
    }
}

Tip:Go 没有三目运算符,所以不支持  ?:  形式的条件判断。

switch...case

if 之后只能是 bool 类型, 而 switch 可以是其他类型。但是 case 后面的数据必须和 switch 变量类型一致。 另外,case 是没有先后顺序的,只要符合条件就会进入。

go 中的 switch 没有 break 语句,每个 case 默认都带着 break 语句。

func main() {
   score := 60
   switch score {
   case 90:
      fmt.Println("优秀")
   case 80:
      fmt.Println("良好")
   case 70:
      fmt.Println("中等")
   case 60:
      fmt.Println("及格")
   default:
      fmt.Println("不及格")
   }
   fmt.Println("程序结束了")
}

程序执行的结果:

及格
程序结束了

尽管 case 语句后面没有 break 语句,switch 也跳出了当前的控制流程。

fallthrough

fallthrough 语句的作用是强制执行 case 后面的没有执行的 case 代码。

只多向下执行一个 case,而不是执行整个 switch 语句。

func main() {
   score := 70
   switch score {
   case 90:
      fmt.Println("优秀")
   case 80:
      fmt.Println("良好")
   case 70:
      fmt.Println("中等")
      fallthrough
   case 60:
      fmt.Println("及格")
   default:
      fmt.Println("不及格")
   }
   fmt.Println("程序结束了")
}

for循环

for 循环是Go语言中唯一一个循环结构。与其他语言不同的是,Go 语言是没有 while 的。

for 表达式1; 表达式2; 表达式3{
  // 循环体
}

for 循环用的最多的地方就是遍历数组或切片等。for关键字后面有三个表达式,每个表达式都可以省略。

for i := 0i < 5i++ {
    fmt.Println(i)
}

// 等价于
j := 0
for ; j < 5; {
    fmt.Println(j)
    j++
}

for 循环时常与 range 结合使用。range 函数返回两个值,第一个是 index,第二个是 value。

func main() {
   arr := [3]string{
      "React",
      "Vue",
      "Go",
   }

   for i, value := range arr {
      fmt.Println(i, value)
   }
}

本文正在参加技术专题18期-聊聊Go语言框架