1

I am new to golang and using Jmoiron Sqlx package for querying the Postgres Database(select query) . The waY I am doing is creating a sql string and calling Select(dest interface{}, query string,args) method. While it works well , the problem is I am generating my sql String dynamically and as such the destination structure should be different for each response .

For ex : - One query can be

Select a,b,c,d from table A ;

the other can be

Select x,y,z from Table B;

From what i understand , there should be two different structs defined for Select Method to work i.e.

Struct Resp1{
   a string
   b string
   c  string
   d string
}

And,

Struct Resp2{
   x string
   y string
   z  string

}

And then invoke select as db.Select(&resp1,query,args) and db.Select(&resp2,query,args) I am thinking if its possible for me to define a common Struct

say Resp3{
   a string
   b string
   c  string
   d string
   x string
   y string
   z  string
}

And based on my select query populates only the matching columns (i.e only a,b,c,d for first and x,y,z for second) .

I tried searching but couldnt get any leads .

Ankur Garg
  • 2,553
  • 8
  • 30
  • 41

2 Answers2

1

I could not get answer to this here and since I needed this , I dug up myself and I found how to solve this in an efficient way .

To solve this one can define all your String values as sql.NullString , integer as sql.int64 , float as sql.float64 etc .

So Say your table is having columns a,b,c,d,e,f and for some response you only have to display a,b,d for some other d,e and so on . Instead of creating different structures and mapping them in db.Select(...) statement Just define ur struct as follows

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"`

Remember sql.NullString will be Marshalled to json with an additional key displayed (Valid:boolean) . You can follow approach here to fix that How can I work with sql NULL values and JSON in Golang in a good way?

Hope this is helpful to someone.!!

Community
  • 1
  • 1
Ankur Garg
  • 2,553
  • 8
  • 30
  • 41
0

Usually your struct should represent all fields of SQL table, not only fields that you are fetching in SELECT, so you can just do SELECT * FROM... and deserialize response from db to your struct Resp3.

yanzay
  • 151
  • 8
  • Select * is a dangerous ploy to play with (In case you add or remove columns) . It may be ok with goLang but with generic use in ORM world (select *) should be avoided . – Ankur Garg Aug 17 '16 at 11:21