我有一个带有切片字段的Favorites
结构体:
type Favorites struct {
Color string
Lunch string
Place string
Hobbies []string
}
我有一个包含另一个结构体的Person
:
type Person struct {
Name string
Favorites Favorites
}
我想确认在“Person”上是否设置了“Favorites”字段。对于其他类型的字段,例如字符串或整数,我会将该字段与零值(""或0)进行比较。
如果我尝试像下面这样与零比较,我会收到错误信息“invalid operation: p2.Favorites == zeroValue(包含[]string的结构体无法进行比较):”。
p2 := Person{Name: "Joe"}
zeroValue := Favorites{}
if p2.Favorites == zeroValue {
fmt.Println("Favorites not set")
}
这与规范中所定义的相符 (https://golang.org/ref/spec#Comparison_operators)。
有没有其他方法可以进行比较,而不是繁琐地比较每个字段(并且必须记住在结构体更改时进行更新)?
一种选择是将Favorites字段指向结构体的指针而不是结构体本身,然后只需与nil进行比较,但这是在一个大型代码库中,因此在这种情况下我宁愿不做可能影响广泛的更改。 https://play.golang.org/p/d0NSp8eBes
Favorites
字段设置为指针吗?如果您不关心等价性,仅仅是想验证该字段是否已设置,则似乎这是最佳选择。 - dalton_c