Jmoiron SQLX Golang通用接口

Jmoiron SQLX Golang common interface

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

例如:- 一个查询可以是

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

另一个可以

Select x,y,z from Table B;

据我了解,应该为 Select 方法定义两个不同的结构,即

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) 我在想我是否可以定义一个通用的 Struct

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

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

我尝试搜索但找不到任何线索。

通常你的结构应该代表 SQL table 的所有字段,而不仅仅是你在 SELECT 中获取的字段,所以你可以只做 SELECT * FROM... 和反序列化数据库对您的结构的响应 Resp3.

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

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

假设您的 table 有 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)。您可以按照此处的方法修复

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