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

如果我想比较两种类型——字符串和接口{},我通常会写:


package main


import "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 main


import "log"


func main() {

    var p1 interface{}

    var p2 string


    p1 = "123"

    p2 = "123"


    log.Println(p1 == p2)

}

如果 type(p1) != string 没有错误。但它是相同的变体还是我应该写上一个?



临摹微笑
浏览 127回答 1
1回答

斯蒂芬大帝

对您的直接问题的简短回答是yes,尽管原始代码(您问题中的第一个片段)显示了对类型检查的更多考虑,因此从软件工程的角度来看它可能更正确。如果不了解更多上下文,很难说清楚。根据Go 规范:接口值具有可比性。如果两个接口值具有相同的动态类型和相同的动态值,或者两者都具有值 nil,则它们是相等的。当类型 X 的值可比较且 X 实现 T 时,非接口类型 X 的值 x 和接口类型 T 的值 t 是可比较的。如果 t 的动态类型与 X 相同且 t 的动态值等于 x,则它们相等.我相信您的要求属于此处第二段的条款。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go