Go 如何通过初始化与否来判断结构的字段是否为零值?

Go 如何通过初始化与否来判断结构的字段是否为零值?,go,struct,Go,Struct,我有一些条件在哪里做一个动态查询,没有设置的值将被忽略。但我搞不清楚如何确定值是否为零,值是否由输入(用户)确定(golang为我们设置) 例如: type User struct { Age int } user := User{ Age : 0 } // query := `Where age = ... ` user := User{} // query := `` 我以前使用过指针和json,但在这种情况下,我无法更改结构 type User struct { Age *i

我有一些条件在哪里做一个动态查询,没有设置的值将被忽略。但我搞不清楚如何确定值是否为零,值是否由输入(用户)确定(golang为我们设置)

例如:

type User struct {
  Age int
}
user := User{ Age : 0 } // query := `Where age = ... ` 
user := User{} // query := `` 
我以前使用过指针和json,但在这种情况下,我无法更改结构

type User struct {
  Age *int `json:"age"`
}
user :=User{}
if user.Age == nil { //not set }

有人能给我想法或关键词吗?谢谢

映射[string]界面的另一种选择可能是使用包装类型(如果您的情况可能的话):


它使意图更加清晰,即使最好直接更改结构

如果无法更改结构定义,则没有解决方案imho。因此,将结构字段设置为指针只是验证字段是否由用户设置的一种方法?您可以在某种程度上使用
map[string]interface{}
,但是,您必须复制所需结构定义的新实例。同样的道理,如果你使用一个本地定义的结构和适当的指针,你仍然需要复制所需结构定义的一个新实例。好的,谢谢你的评论@mh cbon,我对你的评论做了一些研究,现在我有点更清楚了。我对围棋真的很陌生,我在js方面有点背景,但我认为围棋和hemss真的不一样。。很抱歉问一个看起来很糟糕的问题

type UserWrapper {
  user     User
  ageDirty bool
}

func (u UserWrapper) SetAge(age int) {
  u.ageDirty = true
  u.user.Age = age
}

func (u UserWrapper) GetAge() int {
  return u.user.Age
}

func (u UserWrapper) AgeSet() bool {
  return u.ageDirty
}