Go 流程控制语句 for 、if、else、switch、defer
// test001 project main.go
package main
import (
"fmt"
"time"
)
func main() {
//Go 只有一种循环结构——`for` 循环。
// for循环()不强制使用,但是{}必须有
sum := 0
//第一种循环形式
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
//第二种循环形式 for 是go 的while 循环 类似于java的where(sum<100)
for sum < 100 {
sum += sum
}
fmt.Println(sum)
//死循环
// for {
// }
// if
number := -1
if number <= 0 {
fmt.Println("小于0")
}
//if 可以在执行条件之前,执行简单的语句,由这个语句定义的变量的作用域仅在 if 范围之内。
if v := 1; v > 0 {
fmt.Println("大于0")
} else {
fmt.Println("小于0")
}
//switch 条件自上而下的执行,直到匹配成功停止
switch name := "Go"; name {
case "Java":
fmt.Println("我是Java程序员")
case "Go":
fmt.Println("我是Go程序员")
default:
fmt.Println("开发毁一生,且行且珍惜")
}
t := time.Now()
fmt.Println(t)
//没有条件的 switch 同 `switch true` 一样。
switch {
case t.Hour() < 12:
fmt.Println("Good morning!")
case t.Hour() < 17:
fmt.Println("Good afternoon.")
default:
fmt.Println("Good evening.")
}
//defer 语句会延迟函数的执行直到上层函数返回。延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用。
defer fmt.Println("world")
fmt.Println("hello,")
//延迟的函数调用被压入一个栈中。当函数返回时, 会按照后进先出的顺序调用被延迟的函数调用。 输出结果 world 4 3 2 1 0
for i := 0; i < 5; i++ {
defer fmt.Println(i)
}
}
运行结果如下
C:/Go/bin/go.exe build -i [C:/Go/src/test001]
成功: 进程退出代码 0.
C:/Go/src/test001/test001.exe [C:/Go/src/test001]
45
180
小于0
大于0
我是Go程序员
2016-05-04 15:34:41.7925311 +0800 CST
Good afternoon.
hello,
4
3
2
1
0
world
成功: 进程退出代码 0.