欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

go流程控制

程序员文章站 2022-07-09 21:25:41
if Go里面if条件判断语句中不需要括号,条件判断语句里面允许声明一个变量,任何在这里声明的变量都可以在所有的条件分支中使用。 goto 用goto跳转到必须在当前函数内定义的标签,标签名是大小写敏感的。 for for是go中的唯一的循环结构,在go里面有以下几种使用形式 go switch s ......

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