switch是很容易理解的,先来个代码,运行起来,看看你的操作系统是什么吧。
package mainimport ("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:fmt.Printf("%s", os)}}
runtine运行时获取当前的操作系统,使用GOOS。还和if for之类的习惯一样,可以在前面声明赋值变量。我们就在这里来获取操作系统的信息了。
os := runtime.GOOS;
{}里的case比较容易理解。操作系统是 “darwin” 就打印”OS X.”;操作系统是 “linux” 就打印”Linux”;其他的都直接打印系统类别。
在go语言的switch中除非以fallthrough语句结束,否则分支会自动终止。
所以修改一下上面的代码,再运行一下:
package mainimport ("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.")case "windows":fmt.Println("win")fallthroughdefault:fmt.Printf("%s", os)}}
增加了当前的系统的case选项”windows”,还在这个分支使用了fallghrough。
如果你再注释掉 fallthrough,或干脆删除 fallthrough,再运行,就会发现,那个穿透的效果没有了。
总结
switch 的条件从上到下的执行,当匹配成功的时候停止。如果匹配成功的这个分支是以fallthrough结束的,那么下一个紧邻的分支也会被执行。
switch的没有条件的用法。这其实相当于switch true一样。每一个case选项都是bool表达式,值为true的分支就会被执行,或者执行default。
package mainimport ("fmt""time")func main() {t := time.Now()switch {case t.Hour() > 12:fmt.Println("Morning was passed.")case t.Hour() > 17:fmt.Println("Afternoon was passed.")default:fmt.Println("Now too early.")}}

