友情推广
switch
switch用来实现条件选择器,与select有着类似的功能,只是switch中的case判断的是一个通信事件是否完成,而switch中的case判断的是值是否相等。switch与select还有一个不同之处在于switch中的case可以使用逗号来分割多种匹配情况,而select中的case只能是一个通信事件。
switch选择器的语法格式是:
switch 变量 {
case "A","a":
// 当变量值等于大写A,或者小写a时,进入这个分支
// do something
case "B","b":
// 当变量值等于大写B,或者小写b时,进入这个分支
// do something
case "C":
// do something
default:
// 上述条件
// do something
}
关于switch基础的用法,请看下边示例:
package main
import (
"fmt"
)
func main() {
var str = "a"
switch str {
case "A", "a":
fmt.Println("A or a")
case "B", "b":
fmt.Println("B or b")
default:
fmt.Println("I don't know")
}
}
switch除了作为条件选择器,根据变量值来匹配case条件外,还能用于类型查询,switch用于类型查询时,switch后边可以接表达式。请看下边示例代码:
package main
import (
"fmt"
)
func main() {
var ch interface{} = "hello world"
switch val := ch.(type) {
case string:
fmt.Println("数据类型是:string,值是:", val)
case int:
fmt.Println("数据类型是:int,值是:", val)
default:
fmt.Println("default", val)
}
}
switch只能与条件查询配合使用时,switch后边的那个变量才能使用表达式,如上边
val := ch.(type)
首先获取了赋值给ch的那个变量,接着在case中查询那个变量的类型,匹配成功后,进入对应的case分支,执行分支中的代码。
在使用类型查询时,也可以将ch.(type)的返回值忽略,如示例代码:
switch 变量.(type) {
case int:
// do something
default:
// do something
}
golang中的switch与c/c++不同,在c/c++中,如果在case中不使用break结束分支,则会继续执行这个case下边的case分支。在golang中,不用在每一个case中使用break来结束分支,当case分支语句执行完成后,不管有没有break,golang都会退出当前选择器代码块。在switch中使用break,只是用于在case分支中提前退出选择器代码块。
case
case是条件判断,这个关键字只能在switch和select中存在。关于case的用法,请查询switch和select关键字的介绍。
default
default表示默认选择的意思,在golnag中,default只能在switch和select中使用,党switch或select中所有的case条件都不满足的时候,才会执行default分支。关于default的用法,请查询switch和select关键字。