Golang interface为什么可以和int等类型判断相等?

func main() {
    var user_id interface{}
    user_id = 123

    var id int
    id = 123
    
    //这里不能赋值,因为类型不一样
    //id = user_id

    //但是这里可以判断,为什么不同的类型可以判断相等???
    if user_id == id {
        fmt.Println("相等", user_id)
    } else {
        fmt.Println("不相等", user_id)
    }
}
阅读 10.1k
1 个回答

你把interface{}看做structs
1、intreface的值是可比较的。如果两个interface 有相同的动态类型和相同的动态值,而且不为nil,那么这两个interface就是相同的
2、非interface类型X 和 intreface类型T,如果X实现了T, 那么x和t(x t 分代表X和T的值)就是可比较的。如果他们的值是相同的,那么他们就是equal
3、如果struct的所有field都是可比较的,那他们的值就是可比较的。
在go中,判断equal比较简单

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题