golang-流程控制

[TOC]
golang提供了下面几个关键字:if/elseforswitch/case/fallthroughselectbreakcontinuegoto等,实现程序的分支控制,并且赋予它们不同的用法。在本节中我们会重点讨论除了select的其他关键字,select会放在并发和通信的时候提到。

分支

golang的分支语句的关键字为if/elseswitch/case/fallthroughselect后者会在并发和通信的时候提到。

  1. 一个if/else的语法如下:
if optionalStatement1; booleanExep {
    blocks
} else if optionalStatement2; booleanExep {
    blocks
} else {
    blocks
}

其中optionalStatement1是一个可选的表达式:

if a := addSomething(); a {
    fmt.Println(a)
}
//上面的代码等价于下面
a := addSomething()
if a {
    fmt.Println(a)
}
  1. switch语句
    golang的switch语句相较于C/C++有几点不同:首先它的case语句支持任意可比较的类型、其次是case语句不会自动向下执行,最后switch支持数据类型表达式的用法。
    • case语句支持任何能够做等于比较的数据类型
      golang
      switch ext := getext(file); ext {
      case "jpg":
      fmt.Println("jpg file")
      case "png":
      fmt.Println("png file")
      default:
      fmt.Println("other file")
      }
    • case语句不会自动向下执行,如果需要向下执行,需要添加fallthrough
      golang
      switch ext := getext(file); ext {
      case "jpg":
      fallthrough
      case "png":
      fmt.Println("image file")
      default:
      fmt.Println("other file")
      }
    • switch支持数据类型表达式的用法
      golang
      switch x.(type) {
      case bool:
      fmt.Println("x is bool")
      case int:
      fmt.Println("x is int")
      default:
      fmt.Println("other file")
      }

循环

对于循环控制,golang仅提供了for语句,但是赋予了其更加灵活的用法,足以满足需求:

for {
    //无限循环
}

for booleanExp {
    //条件循环,相当于while
}

for optionalStatement1; booleanExp {
}

for index, char := range aString {
    //迭代字符串
}

for char := range aString {
    //迭代字符串
}

for index, item := range anArrOrSlice {
    //迭代数组或切片
}

for item := range anArrOrSlice {
    //迭代数组或切片
}

for key, value := range anMap {
    //迭代字典
}

for key := range anMap {
    //迭代字典
}

for item := range Channels {
    //迭代通道
}

对于breakcontinuegoto,分别用于进行循环控制使用,满足一定条件跳出循环、结束本次循环以及跳转到指定位置。

猜你喜欢

转载自blog.csdn.net/wf649572404/article/details/80869521