Jmoiron SQLX Golang通用接口
我不熟悉golang,使用Jmoiron Sqlx包查询Postgres数据库SELECT查询。我的方法是创建一个sql字符串并调用Selectdest接口{}、查询字符串、args方法。虽然工作正常,但问题是我正在动态生成sql字符串,因此每个响应的目标结构应该不同 例如:-可以使用一个查询Jmoiron SQLX Golang通用接口,go,sqlx,Go,Sqlx,我不熟悉golang,使用Jmoiron Sqlx包查询Postgres数据库SELECT查询。我的方法是创建一个sql字符串并调用Selectdest接口{}、查询字符串、args方法。虽然工作正常,但问题是我正在动态生成sql字符串,因此每个响应的目标结构应该不同 例如:-可以使用一个查询 Select a,b,c,d from table A ; 另一种可能是 Select x,y,z from Table B; 据我所知,应该为Select方法定义两种不同的结构 Struct Res
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
}
以及
然后调用select as 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
我尝试过搜索,但找不到任何线索。通常,您的结构应该表示SQL表的所有字段,而不仅仅是您在SELECT中获取的字段,所以您只需执行SELECT*FROM。。。并将db的响应反序列化到您的结构响应3。我在这里找不到答案,因为我需要这个,我找到了自己,并找到了如何以有效的方式解决这个问题 要解决这个问题,可以将所有字符串值定义为sql.NullString、integer为sql.int64、float为sql.float64等 假设您的表有a、b、c、d、e、f列,对于某些响应,您只需为其他d、e等显示a、b、d。而不是创建不同的结构并在db中映射它们。选择。。。语句仅定义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。您可以按照这里的方法来解决这个问题
希望这对某人有帮助 如果添加或删除列,选择*是一个危险的策略。使用goLang可能没问题,但在ORM world 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"`