品牌手机网站开发哪家好,电子商务网站建设与管理项目计划书,网页翻译怎么关掉,专业做厂房的网站类型断言#xff1a;用于检查某个接口是否包含某个具体类型#xff0c;语法x.(T)#xff0c;x是一个接口类型表达式#xff0c;T是具体的类型#xff0c;如果x包含的值可以被转换成T类型#xff0c;则是ok
在Go语言中#xff0c;任何类型的值都属于空接口类型。空接口类…类型断言用于检查某个接口是否包含某个具体类型语法x.(T)x是一个接口类型表达式T是具体的类型如果x包含的值可以被转换成T类型则是ok
在Go语言中任何类型的值都属于空接口类型。空接口类型interface{}表示空接口它可以容纳任意类型的值。
例子1
var i interface{} hellos, ok : i.(string)
if ok {fmt.Println(s)
} else {fmt.Println(i is not a string)
}例子2
在下面这段代码中(areaIntf.(*Square))是一个类型断言语句它的目的是检查areaIntf是否包含了*Square类型的值并尝试将其转换为*Square类型。在Go语言中类型断言返回两个值转换后的值和一个布尔值表示转换是否成功。
在这里areaIntf被赋值为sq1而sq1是一个*Square类型的指针。因此areaIntf包含了*Square类型的值所以类型断言(areaIntf.(*Square))会返回一个非nil的*Square类型的指针并且ok的值为true表示类型断言成功。
因此在if语句中ok的值为true说明areaIntf包含了*Square类型的值所以程序会打印出The type of areaIntf is: *main.Square。
type Square struct {side float32
}type Shaper interface {Area() float32
}
func main() {var areaIntf Shapersq1 : new(Square)sq1.side 5areaIntf sq1// Is Square the type of areaIntf?if t, ok : areaIntf.(*Square); ok {fmt.Printf(The type of areaIntf is: %T\n, t)}}
func (sq *Square) Area() float32 {return sq.side * sq.side
}
特殊类型的类型断言 type-Switch
接口变量的类型也可以使用一种特殊形式的 switch 来检测type-switch
func main() {printType(1)printType(Hello)
}func printType(i interface{}) {switch i.(type) { //获取i接口的实际具体类型case int:fmt.Println(i is int)case string:fmt.Println(i is string)default:fmt.Println(i is other type)}
}//打印
//i is int
//i is string