我是Golang的新手,使用Jmoiron Sqlx包查询Postgres数据库(选择查询)。我正在做的是创建一个sql字符串并调用Select(dest interface {},query string,args)方法。虽然它运行良好,但问题是我正在动态生成我的sql String,因此每个响应的目标结构应该是不同的。
例如: - 一个查询可以是
Select a,b,c,d from table A ;
另一个可以
Select x,y,z from Table B;
据我所知,选择方法应该有两种不同的结构,即
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)
我在想是否可以定义一个共同的结构
say Resp3{
a string
b string
c string
d string
x string
y string
z string
}
根据我的选择查询,只填充匹配的列(即第一个只有a,b,c,d,第二个是x,y,z)。
我尝试搜索但无法获得任何线索。
答案 0 :(得分:0)
通常你的struct应该代表SQL表的所有字段,而不仅仅是你在SELECT
中提取的字段,所以你可以只做SELECT * FROM...
并反序列化从db到你的struct {{1}的响应。 }。
答案 1 :(得分:0)
我无法在这里得到答案,因为我需要这个,我挖出了自己,我找到了如何以有效的方式解决这个问题。
要解决此问题,可以将所有String值定义为sql.NullString,将整数定义为sql.int64,将float定义为sql.float64等。
所以说你的表有列a,b,c,d,e,f,对于某些响应你只需要显示a,b,d等其他d,e等等。而不是创建不同的结构并在db.Select(...)语句中映射它们只需按以下方式定义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)。您可以按照此处的方法修复How can I work with sql NULL values and JSON in Golang in a good way?
希望这对某人有帮助。!!