接口-类型断言

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("类型不匹配")
}
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容