Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jmoiron SQLX Golang通用接口_Go_Sqlx - Fatal编程技术网

Jmoiron SQLX Golang通用接口

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

我不熟悉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 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"`