检查结构字段是否不为空

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

我有一个示例结构

type Example struct {
    Foo, Bar string
    }

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


芜湖不芜
浏览 82回答 2
2回答

MM们

如果要检查所有字段是否都具有零值,您可以简单地检查var foo Exampleif foo == (Example{}) {  // ...}go 用零值初始化所有结构字段(如果是字符串,则为空字符串)。请记住,如果结构具有不具有可比类型(即指针,切片或映射类型)的字段,则这可能无法按预期工作。""您可以使用反射的方法。用于迭代字段和比较值的值(如反射。DeepEqual() 确实如此)。但在大多数情况下,最好只是编写一个显式执行检查的函数。

湖上湖

我建议你使用反射包,如建议的姆科普里瓦。编写一次,然后将其用于所需的所有结构。例如,我改编了在这里找到的划痕func IsEmpty(object interface{}) (bool, error) {//First check normal definitions of emptyif object == nil {    return true, nil} else if object == "" {    return true, nil} else if object == false {    return true, nil}//Then see if it's a structif reflect.ValueOf(object).Kind() == reflect.Struct {    // and create an empty copy of the struct object to compare against    empty := reflect.New(reflect.TypeOf(object)).Elem().Interface()    if reflect.DeepEqual(object, empty) {        return true, nil    } else {        return false, nil    }}return false, errors.New("Check not implementend for this struct")  }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go