switch是很容易理解的,先来个代码,运行起来,看看你的操作系统是什么吧。

  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. fmt.Printf("%s", os)
  15. }
  16. }

runtine运行时获取当前的操作系统,使用GOOS。还和if for之类的习惯一样,可以在前面声明赋值变量。我们就在这里来获取操作系统的信息了。

  1. os := runtime.GOOS;

{}里的case比较容易理解。操作系统是 “darwin” 就打印”OS X.”;操作系统是 “linux” 就打印”Linux”;其他的都直接打印系统类别。

在go语言的switch中除非以fallthrough语句结束,否则分支会自动终止。

所以修改一下上面的代码,再运行一下:

  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. case "windows":
  14. fmt.Println("win")
  15. fallthrough
  16. default:
  17. fmt.Printf("%s", os)
  18. }
  19. }

增加了当前的系统的case选项”windows”,还在这个分支使用了fallghrough。
如果你再注释掉 fallthrough,或干脆删除 fallthrough,再运行,就会发现,那个穿透的效果没有了。

总结

switch 的条件从上到下的执行,当匹配成功的时候停止。如果匹配成功的这个分支是以fallthrough结束的,那么下一个紧邻的分支也会被执行。
switch的没有条件的用法。这其实相当于switch true一样。每一个case选项都是bool表达式,值为true的分支就会被执行,或者执行default。

  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. func main() {
  7. t := time.Now()
  8. switch {
  9. case t.Hour() > 12:
  10. fmt.Println("Morning was passed.")
  11. case t.Hour() > 17:
  12. fmt.Println("Afternoon was passed.")
  13. default:
  14. fmt.Println("Now too early.")
  15. }
  16. }

golang switch灵活写法 - 图1