我对接口变量的 .(type) 语法很困惑。是否可以像这样使用它:var a,b interface{}// some codeif first.(type) == second.(type) {}还是reflect.TypeOf() 是检查a 和b 的基础类型是否相同的唯一选项?我在上面的代码中做了什么比较?
3 回答
RISEBY
TA贡献1856条经验 获得超5个赞
someInterface.(type)是仅使用在型的开关。事实上,如果您尝试运行它,您会在错误消息中看到它。
func main() {
var a, b interface{}
a = 1
b = 1
fmt.Println(a.(type) == b.(type))
}
prog.go:10: 使用 .(type) 外部类型开关
你可以做的是a.(int) == b.(int),这与int(a) == int(b)
func main() {
var a, b interface{}
a = 1
b = 1
fmt.Println(a.(int) == b.(int))
}
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
HUWWW
TA贡献1874条经验 获得超12个赞
func isType(a, b interface{}) bool {
return fmt.Sprintf("%T", a) == fmt.Sprintf("%T", b)
}
"%T"fmt 选项在幕后使用反射,这将使上述语句实际上与以下语句相同:
func isType(a, b interface{}) bool {
return reflect.TypeOf(a) == reflect.TypeOf(b)
}
任何一个都可以工作,并且不会像其他一些建议一样尝试使用任何类型的断言
- 3 回答
- 0 关注
- 239 浏览
添加回答
举报
0/150
提交
取消