go流程控制

if

  • Go里面if条件判断语句中不需要括号,条件判断语句里面允许声明一个变量,任何在这里声明的变量都可以在所有的条件分支中使用。

    if x := 11; x > 10 {
      fmt.Println("x is greater than 10")
    } else {
      fmt.Println("x is less than 10")
    }
    

goto

  • 用goto跳转到必须在当前函数内定义的标签,标签名是大小写敏感的。

    func myFunc() {
      i := 0
      Here:   //这行的第一个词,以冒号结束作为标签
      println(i)
      i++
      goto Here   //跳转到Here去
    }
    

for

  • for是go中的唯一的循环结构,在go里面有以下几种使用形式

    //经典的初始化/条件/后续形式的for循环
    for expression1; expression2; expression3 {}
    
    //带单个循环条件,即忽略expression1和expression3:
    sum := 1
    for ; sum < 1000;  {
    	sum += sum
    }
    
    //其中;也可以省略,那么就变成如下的代码了,这就是while的功能。
    for sum < 1000 {}
    
    //不带条件的for循环将一直执行,直到在循环体内使用了break或者return来跳出循环    
    for {
      fmt.Println("loop")
      break
    }
    

break和continue

  • 当嵌套过深的时候,break可以配合标签使用,即跳转至标签所指定的位置,break和continue还可以跟着标号,用来跳到多重循环中的外层循环

for配合range可以用于读取slice,map和数组的数据

  • range 在数组和 slice 中都同样提供每个项的索引和值。我们不需要索引的时候使用空值定义符_ 来忽略它,因为对于“声明而未被调用”的变量, 编译器会报错。有时候我们需要这个索引。

  • range在map中迭代键值对

switch

switch sExpr {
  case expr1:
  some instructions
  
  case expr2:
  some other instructions
 
  default:
  other code
}

switch i {
  case 2, 3, 4://我们把很多值聚合在了一个case里面
  fmt.Println("i is equal to 2, 3 or 4")
  default:
  fmt.Println("All I know is that i is an integer")
}

//而如果switch没有表达式,它会匹配true
//不带表达式的switch是if/else的另一种方式
switch {
  case t.Hour() < 12:
  fmt.Println("it's before noon")
  
  default:
  fmt.Println("it's after noon")
}

//Go里面switch默认相当于每个case最后带有break,
//匹配成功后不会自动向下执行其他case,而是跳出整个switch, 
//但是可以使用fallthrough强制执行后面的case代码。**

integer := 6
switch integer {
  case 6:
  fmt.Println("The integer was <= 6")
  fallthrough
  
  default:
  fmt.Println("default case")
}
//输出
//The integer was <= 6
//default case

posted on 2019-05-24 13:39  j_x_x  阅读(229)  评论(0编辑  收藏  举报

导航