Go 如何通过初始化与否来判断结构的字段是否为零值?
我有一些条件在哪里做一个动态查询,没有设置的值将被忽略。但我搞不清楚如何确定值是否为零,值是否由输入(用户)确定(golang为我们设置) 例如: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
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
}