Golang \\学习笔记 流程控制

golang cyanprobe 9年前 (2016-07-21) 3530次浏览 已收录 0个评论

前言:

GO语言的流程控制光是省略小括号就够我瞎眼的了,流程控制是一个程序的股价所以说很重要,可以灵活组合面对复杂的流程。

正文:

基本的 for 循环除了没有了 `( )` 之外(甚至强制不能使用它们),看起来跟 C 或者 Java 中做的一样,而 `{ }` 是必须的。注意for是GO中唯一的循环控制,这说明while的功能也要用for来实现。
如果省略了条件就会形成死循环,
if可以定义一个短小的变量(俗称便捷语句)只能在块作用域有效
在switch语句中除非以fallthrough结束,否则自动不向下运行。没有条件的 switch 同 `switch true` 一样。

  1.  package main
  2. import (
  3. "fmt"
  4. "runtime"
  5. )
  6. func main() {
  7. fmt.Print("Go runs on ")
  8. switch os := runtime.GOOS; os {
  9. case "darwin":
  10. fmt.Println("OS X.")
  11. case "linux":
  12. fmt.Println("Linux.")
  13. default:
  14. // freebsd, openbsd,
  15. // plan9, windows...
  16. fmt.Printf("%s.", os)
  17. }
  18. }

defer 语句会延迟函数的执行直到上层函数返回。延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用。好神奇 = =;可以用于在最后释放某一资源。

  1. //返回hello world
  2. package main
  3. import "fmt"
  4. func main() {
  5. defer fmt.Println("world")
  6. fmt.Println("hello")
  7. }

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

  1. package main
  2. import "fmt"
  3. //此程序返回 counting 9 8 7 6 5 4 3 2 1 0 done
  4. func main() {
  5. fmt.Println("counting")
  6. for i := 0; i < 10; i++ {
  7. defer fmt.Println(i)
  8. }
  9. fmt.Println("done")
  10. }

另外GO语言支持跳转语句也就是goto

  1. package main
  2. import "fmt"
  3. //返回 0123456789
  4. func main() {
  5. i := 0
  6. this:
  7. fmt.Print(i)
  8. i++
  9. for i < 10 {
  10. goto this
  11. }
  12. }

后记:

流程控制已经折腾完,接下来要看Go的函数这一块了,函数和错误处理一起了吧,增加些篇章,还有进度。


CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Golang \\学习笔记 流程控制
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址