我从POST接收参数,并根据这些参数是否存在,我想改变数据存储区查询。这是一个示例,我们可能会或可能不会从帖子消息中收到“标题”变量。如果确实存在,我想将其作为过滤器包含在查询中:
q := datastore.NewQuery("book").
Filter("author =", "DB").
if title != nil {Filter("title =",title).}
Order("author")
有什么建议吗?
答案 0 :(得分:1)
如果参数存在,可以选择在查询上调用另一个Query.Filter()
方法。请确保存储返回值,因为它可能是一个不同的派生查询
原因是所有查询构建器/修饰符方法都返回一个派生查询,您可以使用该查询来链接多个操作。您不必一步完成所有操作,您可以存储中间结果查询并从那里继续“工作”(例如添加新过滤器)。请记住始终存储返回值,并且必须使用最后一个方法返回的Query
。
解决方案(候选人):
q := datastore.NewQuery("book").Filter("author =", "DB")
if title != nil {
q = q.Filter("title =", title)
}
q = q.Order("author")
注意:强>
你没有提到它,但我认为title
是string
。类型string
的变量不能具有nil
值。 string
的零值是空字符串""
,因此请使用它来比较/测试:
q := datastore.NewQuery("book").Filter("author =", "DB")
if title != "" {
q = q.Filter("title =", title)
}
q = q.Order("author")