Я использую 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
struct, так что, возможно, есть выход без struct).Также могут быть обходные пути SQL, но я думаю, что было бы более эффективно создать запрос без всех возможных столбцов.
РЕДАКТИРОВАТЬ: Кстати, делая мой поисковый запрос Google более точным, янашел кучу вещей, связанных с моей проблемой, вероятно, я попытаюсь использовать это сейчас.Для тех, кто также заинтересован: старый пример go go playstation
Выполнение динамических запросов SQL к базе данных MySQL
пакет gorp (фрагмент кода звучит очень многообещающе)