检查结构体字段是否不为空

dan*_*nyx -1 struct go

如何在没有显式的情况下迭代结构中的字段并检查它们是否不为空?

我有一个示例结构

type Example struct {
    Foo, Bar string
}
Run Code Online (Sandbox Code Playgroud)

我可以明确检查每个字段是否不是“”,但我不想这样做。有什么简单的方法可以完成我的需要吗?

gre*_*gor 5

如果想检查所有字段是否都为零值,您可以简单地检查

var foo Example
if foo == (Example{}) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

go 用零值初始化所有结构体字段(如果是字符串,则为空字符串"")。请记住,如果结构体具有不可比较类型(即指针、切片或映射类型)的字段,则这可能无法按预期工作。

您可以使用 的方法reflect.Value来迭代字段并比较值(就像reflect.DeepEqual()这样做)。但在大多数情况下,最好简单地编写一个显式执行检查的函数。