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

Go自动类型转换-将接口{}与具体类型进行比较,go,Go,如果我想比较两种类型-string和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("fa

如果我想比较两种类型-stringinterface{}我通常会写:

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")    
    }
}
我认为当类型(p1)!=字符串。 但是如果我写的是正确的吗

package main

import "log"

func main() {
    var p1 interface{}
    var p2 string

    p1 = "123"
    p2 = "123"

    log.Println(p1 == p2)
}

如果类型(p1)!=字符串中没有错误。但它是相同的变体,还是我应该写上一个

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


根据报告:

界面值具有可比性。两个接口值相等,如果 它们具有相同的动态类型和相同的动态值,或者两者都具有 价值为零

非接口类型x的值x和接口类型t的值t 当X类型的值具有可比性且X实现 如果T的动态类型与X和T的相同,则它们相等 动态值等于x


我相信您所问的问题属于第二段的内容。

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


根据报告:

界面值具有可比性。两个接口值相等,如果 它们具有相同的动态类型和相同的动态值,或者两者都具有 价值为零

非接口类型x的值x和接口类型t的值t 当X类型的值具有可比性且X实现 如果T的动态类型与X和T的相同,则它们相等 动态值等于x

我相信你的问题符合第二段的规定。

回答了你的问题吗?回答了你的问题吗?