有这么一个场景,当你在和用户对接的时候,调取第三方接口,但是第三方接口的时常变化的,比如从string类型变为int,这个时候你需要再去判断类型,获取第三方接口的参数。比较麻烦。
针对这一场景,go中对switch进行了升级。a是一个未知类型的变量,switch b := a.(type)
用这个方式来赋值,b + case进行判断就是有确定类型的变量。
未知类型比如类似于java的Object,interface{},通过case之后,变成确定的数据类型的值。
先看下例子:
a是任意类型,因为传入值的类型是不确定的。所以我们赋值a为任意类型。
case是需要的类型,如果需要的是string类型,那么将string类型给b,如果需要int类型,那么将int类型给b,其实b拥有a的类型,需要什么类型,那么就case什么类型。
func test() {
// a是任意类型,这个可以当做传入的参数,根据传入的参数来进行判断。
var a any
switch b := a.(type) {
case string:
fmt.Printf("type of b is %T\n", b)
fmt.Printf("value of b is %v\n", b)
case int:
fmt.Printf("type of b is %T\n", b)
fmt.Printf("value of b is %v\n", b)
default:
fmt.Printf("type of b is %T\n", b)
fmt.Printf("value of b is %v\n", b)
}
}
func test() {
var a any = 1
switch b := a.(type) {
case string:
fmt.Printf("type of b is %T\n", b)
fmt.Printf("value of b is %v\n", b)
case int:
fmt.Printf("type of b is %T\n", b)
fmt.Printf("value of b is %v\n", b)
default:
fmt.Printf("type of b is %T\n", b)
fmt.Printf("value of b is %v\n", b)
}
}
结果为:
type of b is int
value of b is 1
可以看出以下类型: