Go语言 流程控制

Go语言支持以下几种流程控制语句
条件语句:关键字为 if,else 和else if
选择语句:关键字为switch,case和select(在channel中使用)
循环语句:关键字为 for 和 range
跳转语句:关键字 goto

条件语句: if else 和 else if

func main() {
   demo :=example(2)
   fmt.Println(demo)
}

func example( x int) int  {
   if x == 0 { //不需要将 x==0 括起来,左花括号必须与if在同一行,所有if中的花括号必须存在
      return 1
   }else {
      return x
   }
}

注:if语句允许在if里面声明变量,但是这个变量的作用域只在该条件逻辑块内。

选择语句: 不用break结尾,go语言默认每个case最后都带有break

func main() {
   var i string = "3"
   switch i {
   case "1":
      fmt.Println("这是1")
   case "2":
      fmt.Println("这是2")
   case "3":
      fallthrough //强制跳到下一个case,必须存在下一个case或者default,否则报错
   case "4":
      fmt.Println("这是4")
   }
}

上面的switch 后面的表达式不是必须的,因此上面的可以修改为:

func main() {
   var i int = 3
   switch  {
   case i==1:
      fmt.Println("这是1")
   case i==2:
      fmt.Println("这是2")
   case i==3:
      fallthrough
   case i==4:
      fmt.Println("这是4")
   }
}

循环语句 :for 和range
Go 只有一种循环结构——for 循环。

func main() {
   nums := [10]int{1,2,3,4,5,6,7,8,9,10}
   for a,b:=range nums{ //这里的a只索引下标,b指索引下标对应的元素值
      fmt.Println(a,b)
   }
}

当没有指定循环条件时,将成为死循环

for{
   fmt.Println()
}

goto,break,continue的使用与区别
在Go语言的for循环中也支持使用break,continue来控制循环,break是跳出当前循环,continue是跳出本次循环。Go语言中break有个更为高级的功能:跳转到指定标签
以下面这个代码为例

func main() {
      for i:=0;i<5 ;i++  {
         fmt.Print("  ")
         fmt.Print(i," ")
         for j:=0;j<5 ;j++  {
            fmt.Print(j)
         }
      }
}
----output----
  0 01234  1 01234  2 01234  3 01234  4 01234

加入判断条件与break

func main() {
      for i:=0;i<5 ;i++  {
         fmt.Print("  ")
         fmt.Print(i," ")
         for j:=0;j<5 ;j++  {
            fmt.Print(j)
            if j == 3 {
               break
            }
         }
      }
}
----output----
  0 0123  1 0123  2 0123  3 0123  4 0123

再添加自定义loop标签,让break跳出到指定的标签,注:loop标签可以自定义,我这里标签名叫做loop,你可以命名为其他

func main() {
   loop://自定义跳转标签  ①
      for i:=0;i<5 ;i++  {
         fmt.Print("  ")
         fmt.Print(i," ")  ②
         for j:=0;j<5 ;j++  {
            fmt.Print(j)
            if j == 3 {
               break loop
            }
         }
      }
}
-----output-----
  0 0123

经过上面的测试,我们可以看出:
①未使用loop标签时,break是跳出当前循环
②使用loop标签后,break就会终止loop处的外层循环
③loop标签不能使用在break之后,若放在break之前,loop必须是跟break连接成一个整的循环,比如放在代码中的①或②处都可以。

break与continue是配合for使用的,但goto的使用不限于for,通常与条件语句配合使用。
比如下面这个代码中,当for循环到i=3时,跳转到loop标签输出

func main() {
   for i:=0;i<5 ;i++  {
      fmt.Println(i)
      if i == 3 {
         goto loop //跳转带 loop 标签处
      }
   }
   loop:
      fmt.Println("loop 标签")
}
-----output-----
0
1
2
3
loop 标签

当loop标签在for循环前面时,这时候 goto跳转到 loop标签就会形成死循环

func main() {
loop: // 这里就会形成死循环
   fmt.Println("loop 标签")
   for i:=0;i<5 ;i++  {
      fmt.Println(i)
      if i == 3 {
         goto loop //跳转到 loop标签
      }
   }
}

除了for循环外,其他的使用goto的场景

func main() {
   a := 3
   fmt.Println(a+1)
   goto loop
   fmt.Println(a+2)
loop:
   fmt.Println("loop 标签")
}
-----output-----
4
loop 标签

根据上面的测试,我们可以看出:
①goto的使用不限于for,通常与条件语句配合使用,可以实现满足某条件后跳出循环体到指定的地方继续执行。
②goto语句可以无条件的进行跳转到指定行。
③goto跳转的标签既可以定义在for循环前面,也可以定义在for循环后面。在for前面时就有可能形成死循环,在for循环后面就会执行标签下面的代码。
④一般情况下,不推荐使用goto语句,很容易造成代码流程混乱。

参考文章:https://blog.csdn.net/mofiu/article/details/77318376

你可能感兴趣的:(Go语言 流程控制)