如果检查结构类型golang

如果检查结构类型golang,go,Go,如何为Golang中的if语句使用临时结构类型 struct card { suit string rank string } d := newDeck() //basically a list of cards c := card{"Spades", "A"} if d[0] != c { //works } if d[0] != card{"Spades", "A"} { //doesn't work } 是否总是需要声明变量来比较结构类型,或者是否有办法使其像代码

如何为Golang中的if语句使用临时结构类型

struct card {
    suit string
    rank string
}
d := newDeck() //basically a list of cards

c := card{"Spades", "A"}

if d[0] != c { //works

}

if d[0] != card{"Spades", "A"} { //doesn't work
}

是否总是需要声明变量来比较结构类型,或者是否有办法使其像代码的最后一行那样更短?

Golang不支持使用
=
运算符比较对象。改用
reflect.DeepEqual

if !reflect.DeepEqaul(d[0], card{"Spades", "A"}) { 
    #Your logic
}
报告说:

当使用LiteralType的TypeName形式的复合文字显示为“if”、“for”或“switch”语句块的关键字和左大括号之间的操作数,并且复合文字未包含在括号、方括号或大括号中时,就会产生解析歧义。在这种罕见的情况下,literal的大括号被错误地解析为引入语句块的大括号。要解决歧义,复合文字必须出现在括号内

添加括号以解决歧义:

if d[0] != (card{"Spades", "A"}) { 
    fmt.Println("hello")
}