(二) Go的关键字

for


Go 只设计了一种循环 就是 for 循环。

基本的 for 循环包含三个组成部分(由 分号 分开):

for i:=1; i < 10; i++ {
  // i:=1 初始化语句
  // i < 10 循环条件表达式
  // i++ 后置语句
}

  初始化语句;循环条件表达式;后置语句

    初始化语句:在第一次循环执行前被执行

    循环条件表达式:每次迭代开始前被求值

    后置语句:每次迭代后被执行

初始化语句一般是一个短变量什么,这里声明的变量只能在整个 for 循环作用域中可见。

如果条件表达式的值为 false , 那么迭代终止。

注:Go 不像C,Java,或者Javascript 等其他语言,for语句的三个组成部分 并不需要用括号括起来,但循环体必须用 {} 括起来 表明作用域。

另:循环初始化语句和后置语句都是可选的。

  for 是 Go 的 "while" 基于此可以省略分号: C 的 while 在 Go 中叫 for

  循环条件可以省略,如果省略了则循环不会结束,

for {
  //做你要做的
}

  因此可以用简洁地形式表达死循环。

 

if


 

就像 for 循环一样,Go 的 if 语句也不要求用 () 将条件括起来,同时, {} 还是必须有的。

if 的便捷语句

  跟 for 一样,if 语句可以在条件之前执行一个简单语句。

  由这个语句定义的变量的作用域仅在 if 范围之内。

if 和 else

  在 if 的便捷语句定义的变量同样可以在任何对应的 else 块中使用。

if ok:=func(); ok {
  
} else {

}

  

 

switch


num := 0
switch {
case num < 1:
	fallthrough
case num <= 2:
	fmt.Println("num <= 2")
default:
	fmt.Println("default")
}

除非以 fallthrough 语句结束,否则分支会自动终止。

switch 的执行顺序

  switch 的条件从上到下的执行,当匹配成功的时候停止。

  注意:Go playground 中的时间总是从 2009-11-10 23:00:00 UTC 开始。

没有条件的switch

  没有条件的 switch 同 switch true 一样。

  这一构造使得可以用更清晰的形式来编写长的 if - then - else 链

 

defer


 

defer 语句会延迟函数的执行直到上层函数返回。

延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用。

defer 栈

  延迟的函数调用被压入一个栈中。但函数返回时,会按照后进先出的顺序调用被延迟的函数调用。

eg:

例中 defer 后的 fmt.Println("defer") 将会在 main 的 return 后执行

func main() {
  defer fmt.Println("defer")
  num := 0
  switch {
    case num < 1:
	  fallthrough
    case num <= 2:
	  fmt.Println("num <= 2")
    default:
	  fmt.Println("default")
  }
  return
}

 

posted @ 2017-08-15 15:37  问号是我  阅读(253)  评论(0编辑  收藏  举报