接口-类型断言

package main

import(
"fmt"
)
type shaper interface{
}
type circle struct{
radius int
}
func(c circle)area()int{
return c.radiusc.radius2
}

type rect struct{
height int
}

func checkType(a interface{}){
switch varC :=a.(type){
case int:
fmt.Println("int")
fmt.Println(varC)
}
}

func main(){
var shaperB shaper
// 一个接口变量所包含的值可能有多种类型,尤其是空接口变量,可以被赋予任意类型的值
shaperB=rect{10}
// 为了能动态判断接口所代表的实际类型,也就是这里所定义的操作,需要用到类型断言。这里我把新初始化的rect{10}赋值给shaperB这个接口变量

varR,ok:=shaperB.(rect)
// varR,ok=varT.(TypeA)

// varR:判断操作返回的值,如果判断成功,将varT转换为TypeA的值并赋值给varR,如果判断失败,varR会被设为未初始化的TypeA类型的变量
// ok:布尔值。判断成功是true,判断失败是false
// varT:接口赋值后的变量类型:必须是接口类型变量
// TypeA:要判断的类型:必须是实现了varT接口类型的变量

if ok{
    fmt.Print("当前接口类型是rect")
    fmt.Println(varR)
}else{
    fmt.Print(varR)
    // 如果没有返回成功,就返回初始值
}

var num int=10
checkType(num)

}

func test6() {
var i interface{} = "TT"
j, b := i.(int)
if b {
fmt.Printf("%T->%d\n", j, j)
} else {
fmt.Println("类型不匹配")
}
}

你可能感兴趣的:(接口-类型断言)