猿问

我可以在 Golang 中将变量类型与 .(type) 进行比较吗?

我对接口变量的 .(type) 语法很困惑。是否可以像这样使用它:


var a,b interface{}

// some code

if first.(type) == second.(type) {

}

还是reflect.TypeOf() 是检查a 和b 的基础类型是否相同的唯一选项?我在上面的代码中做了什么比较?


隔江千里
浏览 240回答 3
3回答

RISEBY

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

您需要指定类型。该语法用于对接口进行类型断言,而不是检查特定类型。你将不得不使用reflect.TypeOf它。您可以查看此答案以正确使用类型断言。

HUWWW

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)}任何一个都可以工作,并且不会像其他一些建议一样尝试使用任何类型的断言
随时随地看视频慕课网APP

相关分类

Go
我要回答