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)。您可以按照此处的方法修复
希望这对某人有所帮助。!!
我是 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)。您可以按照此处的方法修复
希望这对某人有所帮助。!!