如果我想比较两种类型-字符串和接口{},我通常会写:
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) != string时,我认为它是保存变量。但是如果我写信是对的吗?
package main
import "log"
func main() {
var p1 interface{}
var p2 string
p1 = "123"
p2 = "123"
log.Println(p1 == p2)
}如果类型(P1) !=字符串没有错误。但这是同一个变体,还是我应该写上一个?
发布于 2020-03-23 13:59:54
对您当前问题的简短回答是yes,尽管原始代码(您问题中的第一个片段)对类型检查显示出更多的考虑,因此从SW工程的角度来看,它可能更正确。如果不了解更多的上下文,就很难分辨。
根据围棋规格
接口值是可比较的。如果两个接口值具有相同的动态类型和相同的动态值,或者两者的值为零,则它们是相等的。 非接口类型x的值x和接口类型T的值t是可比较的,当X类型的值可比较且X实现T时,如果t的动态类型与X相同,t的动态值等于x,则它们是相等的。
我相信你的要求是在第二段的范围内。
https://stackoverflow.com/questions/60810966
复制相似问题