Golang中国
// 有一个这样子的struct
type A struct {
    Name string
}

然后有一个变量a,如何判断变量a是不是struct A的实例?

4 回复
jimmykuu
#1 jimmykuu • 2017-06-08 11:26

用类型断言

eric160
#2 eric160 • 2017-06-08 11:33

可以用类型断言:

type A struct{
Name string
}

func main(){
a:=A{"name"} //是struct A 类型;
//a:=10   //不是struct A 类型;
_,ok:=interface{}(a).(A)
if ok{
fmt.println("yes")
}else{
fmt.println("no")
}
}
codert
#3 codert • 2017-06-08 12:07

就是这里我有点疑问,为什么直接写a.(A)会出现
non-interface type A on left
而加上了interface{}就没问题呢

eric160
#4 eric160 • 2017-06-08 13:34

Comma-ok断言的语法是:value, ok := element.(T)。element必须是接口类型的变量,T是普通类型。如果断言失败,ok为false,否则ok为true并且value为变量的值。

所以要先把a转换为空接口类型:interface{}(a)
然后再用类型断言

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。