如果Type
是具体某个类型,类型断言会检查 varl
的动态类型是否等于具体类型 Type
。如果检查成功,类型断言返回的结果是 varl
的动态值,其类型是 Type
。 - 如果 Type
是接口类型,类型断言会检查 varl
的动态类型是否满足
Go
中使用interface {}
空接口来表示可以是任意类型,以至于这样,需要检测该变量
类型,那便要类型断言
。
val,ok := varl.(Type)
val 必须是一个借口类型的变量,否则编译报错。
Type 是一个具体的类型。
该断言表达式返回一个val
和一个布尔类型ok
,根据ok
判断varl
是否属于Type
类型。
- 如果
Type
是具体某个类型,类型断言会检查varl
的动态类型是否等于具体类型Type
。如果检查成功,类型断言返回的结果是varl
的动态值,其类型是Type
。 - 如果
Type
是接口类型,类型断言会检查varl
的动态类型是否满足Type
。如果检查成功,varl
的动态值不会被提取,返回值是一个类型为Type
的接口值。 - 无论
Type
是什么类型,如果varl
是 nil 接口值,类型断言都会失败。
package main
import (
"fmt"
)
func main() {
//定义一个任意类型的变量
var site interface{}
site = "https://qiucode.cn"
web, ok := site.(string)
fmt.Println(web, ok)
}
类型断言可配合switch
进行使用。
package main
import (
"fmt"
)
func getType(t interface{}) {
switch t.(type) {
case string:
fmt.Println("该类型为 string ")
case int:
fmt.Println("该类型是 int ")
case float64:
fmt.Println("该类型为 float64 ")
default:
fmt.Println("暂没有匹配的类型")
}
}
func main() {
//定义一个任意类型的变量
var site interface{}
site = "https://qiucode.cn"
getType(site)
}