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,

Другие вопросы по тегам