前言:
GO语言的流程控制光是省略小括号就够我瞎眼的了,流程控制是一个程序的股价所以说很重要,可以灵活组合面对复杂的流程。
正文:
基本的 for 循环除了没有了 `( )` 之外(甚至强制不能使用它们),看起来跟 C 或者 Java 中做的一样,而 `{ }` 是必须的。注意for是GO中唯一的循环控制,这说明while的功能也要用for来实现。
如果省略了条件就会形成死循环,
if可以定义一个短小的变量(俗称便捷语句)只能在块作用域有效
在switch语句中除非以fallthrough结束,否则自动不向下运行。没有条件的 switch 同 `switch true` 一样。
- package main
- import (
- "fmt"
- "runtime"
- )
- func main() {
- fmt.Print("Go runs on ")
- switch os := runtime.GOOS; os {
- case "darwin":
- fmt.Println("OS X.")
- case "linux":
- fmt.Println("Linux.")
- default:
- // freebsd, openbsd,
- // plan9, windows...
- fmt.Printf("%s.", os)
- }
- }
defer 语句会延迟函数的执行直到上层函数返回。延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用。好神奇 = =;可以用于在最后释放某一资源。
- //返回hello world
- package main
- import "fmt"
- func main() {
- defer fmt.Println("world")
- fmt.Println("hello")
- }
延迟的函数调用被压入一个栈中。当函数返回时, 会按照后进先出的顺序调用被延迟的函数调用。
- package main
- import "fmt"
- //此程序返回 counting 9 8 7 6 5 4 3 2 1 0 done
- func main() {
- fmt.Println("counting")
- for i := 0; i < 10; i++ {
- defer fmt.Println(i)
- }
- fmt.Println("done")
- }
另外GO语言支持跳转语句也就是goto
- package main
- import "fmt"
- //返回 0123456789
- func main() {
- i := 0
- this:
- fmt.Print(i)
- i++
- for i < 10 {
- goto this
- }
- }
后记:
流程控制已经折腾完,接下来要看Go的函数这一块了,函数和错误处理一起了吧,增加些篇章,还有进度。