1

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

例如: - 一个查询可以是

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

另一个可以

Select x,y,z from Table B;

据我了解,应该为 Select Method 定义两个不同的结构来工作,即

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

和,

Struct Resp2{
   x string
   y string
   z  string

}

然后调用 select as db.Select(&resp1,query,args)db.Select(&resp2,query,args) 我在想我是否可以定义一个通用的 Struct

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

并且基于我的选择查询仅填充匹配的列(即只有 a,b,c,d 用于第一和 x,y,z 用于第二)。

我尝试搜索但无法获得任何线索。

4

2 回答 2

1

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

要解决这个问题,可以将所有字符串值定义为 sql.NullString ,整数为 sql.int64 ,浮点为 sql.float64 等。

因此,假设您的表格有列 a,b,c,d,e,f 并且对于某些响应,您只需为其他一些 d,e 等显示 a,b,d 。而不是创建不同的结构并在 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 将被编组为 json 并显示一个附加键 (Valid:boolean) 。您可以按照这里的方法来解决 我如何以一种好的方式在 Golang 中使用 sql NULL 值和 JSON?

希望这对某人有帮助。!

于 2016-08-23T15:13:01.113 回答
0

通常,您的 struct 应该代表 SQL 表的所有字段,而不仅仅是您正在获取的字段SELECT,因此您可以执行SELECT * FROM...和反序列化从 db 到您的 struct 的响应Resp3

于 2016-08-17T11:01:18.207 回答