为了账号安全,请及时绑定邮箱和手机立即绑定

Go 自动类型转换 - 将 interface{} 与具体类型进行比较

Go 自动类型转换 - 将 interface{} 与具体类型进行比较

Go
临摹微笑 2022-05-23 16:19:38
如果我想比较两种类型——字符串和接口{},我通常会写:package mainimport "log"func main() {    var p1 interface{}    var p2 string    p1 = "123"    p2 = "123"    if v, ok := p1.(string); ok {        log.Println(v == p2)    } else {        log.Println("false")        }}我认为它是type(p1) != string时的保存变体。但是如果我写它是正确的吗?:package mainimport "log"func main() {    var p1 interface{}    var p2 string    p1 = "123"    p2 = "123"    log.Println(p1 == p2)}如果 type(p1) != string 没有错误。但它是相同的变体还是我应该写上一个?去
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

对您的直接问题的简短回答是yes,尽管原始代码(您问题中的第一个片段)显示了对类型检查的更多考虑,因此从软件工程的角度来看它可能更正确。如果不了解更多上下文,很难说清楚。


根据Go 规范

接口值具有可比性。如果两个接口值具有相同的动态类型和相同的动态值,或者两者都具有值 nil,则它们是相等的。

当类型 X 的值可比较且 X 实现 T 时,非接口类型 X 的值 x 和接口类型 T 的值 t 是可比较的。如果 t 的动态类型与 X 相同且 t 的动态值等于 x,则它们相等.

我相信您的要求属于此处第二段的条款。


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信