Jmoiron SQLX Golang общий интерфейс
Я новичок в golang и использую пакет Jmoiron Sqlx для запросов к базе данных Postgres (выберите запрос) . WaY, который я делаю, создает строку sql и вызывает метод Select(dest interface{}, строка запроса,args) . Хотя это работает хорошо, проблема в том, что я генерирую строку sql динамически, и поэтому структура назначения должна быть разной для каждого ответа.
Например: - Один запрос может быть
Select a,b,c,d from table A ;
другой может быть
Select x,y,z from Table B;
Из того, что я понимаю, должны быть две разные структуры, определенные для выбора метода, т.е.
Struct Resp1{
a string
b string
c string
d string
}
А также,
Struct Resp2{
x string
y string
z string
}
И затем вызвать выберите как db.Select(&resp1,query,args)
а также db.Select(&resp2,query,args)
Я думаю, возможно ли мне определить общую структуру
say Resp3{
a string
b string
c string
d string
x string
y string
z string
}
И на основе моего запроса на выборку заполняются только соответствующие столбцы (т. Е. Только a, b, c, d для первого и x,y,z для второго) .
Я пытался искать, но не мог получить никаких лидов.
2 ответа
Я не мог получить ответ на этот вопрос здесь, и, так как мне это было нужно, я откопал себя и нашел, как решить это эффективным способом.
Чтобы решить эту проблему, можно определить все значения String как sql.NullString, целое число как sql.int64, float как sql.float64 и т. Д.
Итак, скажем, в вашей таблице есть столбцы a,b, c, d, e, f, и для какого-то ответа вам нужно только отобразить a,b, d для некоторых других d, e и так далее. Вместо того, чтобы создавать различные структуры и отображать их в выражении db.Select(...) Просто определите вашу структуру следующим образом
a sql.NullString `json:"whatever u wish to have as key,omitempty"`
b sql.NullString `json:"b,omitempty"`
c sql.NullString `json:"c,omitempty"`
d sql.int64 `json:"d,omitempty"`
e sql.float64 `json:"e,omitempty"`
Помните, что sql.NullString будет Marshalled в json с отображением дополнительного ключа (Действительный: логический) . Вы можете следовать подходу здесь, чтобы исправить это. Как я могу хорошо работать со значениями NULL sql и JSON в Golang?
Надеюсь, это кому-нибудь пригодится.!!
Обычно ваша структура должна представлять все поля таблицы SQL, а не только те поля, которые вы выбираете в SELECT
так что вы можете просто сделать SELECT * FROM...
и десериализовать ответ из базы данных в вашу структуру Resp3
,