Jmoiron SQLX Golang通用接口

时间:2016-08-17 10:43:40

标签: go sqlx

我是Golang的新手,使用Jmoiron Sqlx包查询Postgres数据库(选择查询)。我正在做的是创建一个sql字符串并调用Select(dest interface {},query string,args)方法。虽然它运行良好,但问题是我正在动态生成我的sql String,因此每个响应的目标结构应该是不同的。

例如: - 一个查询可以是

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

}

然后调用select 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 个答案:

答案 0 :(得分:0)

通常你的struct应该代表SQL表的所有字段,而不仅仅是你在SELECT中提取的字段,所以你可以只做SELECT * FROM...并反序列化从db到你的struct {{1}的响应。 }。

答案 1 :(得分:0)

我无法在这里得到答案,因为我需要这个,我挖出了自己,我找到了如何以有效的方式解决这个问题。

要解决此问题,可以将所有String值定义为sql.NullString,将整数定义为sql.int64,将float定义为sql.float64等。

所以说你的表有列a,b,c,d,e,f,对于某些响应你只需要显示a,b,d等其他d,e等等。而不是创建不同的结构并在db.Select(...)语句中映射它们只需按以下方式定义ur结构

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将被编组到json,并显示一个额外的键(Valid:boolean)。您可以按照此处的方法修复How can I work with sql NULL values and JSON in Golang in a good way?

希望这对某人有帮助。!!