我正在使用golang,go_reform,PostgreSQL。我想要做的是一个REST搜索实用程序,在我遇到条件搜索查询之前,一切都很好。 “有条件的”在这里表示我要在一个表中搜索10列,并且可能有很多组合,所以我无法单独处理它们。我需要的是查询生成器,但是我不了解如何在Go中实现此功能。现在,我有一个这样的想法,但似乎效率不高
type Query struct {
Id *int64
FirstName *string
MiddleName *string
LastName *string
AreaId *int64
Birthday *time.Time
}
func (table *Query) Find() (*User) {
if table.Id != nil {
idstr := fmt.Sprintf("WHERE Id = %d AND ", table.Id)
}
else idstr := "WHERE "
}
if table.FirstName != "" {
firststr := fmt.Sprintf("FirstName = %s AND", table.FirstName)
}
else firststr := ""
}//and so on
感觉真的很尴尬,所以我想知道是否有更好的方法来确定Find()
中的字段并基于此构建SQL查询。 (实际上,它来自JSON并绑定到Query
结构,因此也许有一种没有结构的方法)。也可能有SQL解决方法,但我认为在没有所有可能的列的情况下构建查询会更有效。
编辑:顺便说一句,为了使我的Google搜索查询更准确,我发现了一堆与我的问题有关的东西,也许我现在会尝试使用它。对于那些也有兴趣的人: old go playground example
Making dynamic SQL queries to a MySQL DB
gorp package(片段内容听起来很有希望)
答案 0 :(得分:0)
在PostgreSQL
查询(字符串sql,args ...)
在这里,当我以表格形式将值传递给Query时 查询(字符串,值) 抛出一个错误,仅添加了一个值,预期应为2,如何将接口数组作为args传递给Query
我找到了答案:您需要以Query(string,values ...)的形式传递它
答案 1 :(得分:0)
在orm GORM
中,我们这样做
if con1 {
db.Where("con1 =?", con1Flag)
}
如果您编写自己的文件,建议改成gorm。或者您可以参考您正在使用的文件,无论它是否具有与上述代码相同的用法。 如果您要编写自己的代码,则可以随意进行。 如果您在小组中工作,我想使用成熟的Orm会更好