2016-08-17 36 views
0

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

对于前: - 一个查询可以

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 

} 

,然后调用选择为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 
} 

而且只填充匹配列(即只有一个, b,c,d代表第一个,x,y,z代表第二个)。

我试过搜索,但无法获得任何线索。

回答

0

我不能在这里得到答案,因为我需要这个,我挖了自己,我发现如何以有效的方式解决这个问题。

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

所以说你的表有列a,b,c,d,e,f,对于某些响应你只需要显示a,b,d代表其他的d,e等等。而不是创建不同的结构和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(有效期:布尔) 。你可以按照这里的方法来解决这个问题How can I work with sql NULL values and JSON in Golang in a good way?

希望这对别人有帮助。

0

通常你应该结构代表你是在SELECT获取SQL表的各个领域,不仅场,所以你可以做SELECT * FROM...和反序列化从数据库到你的结构Resp3响应。

+0

选择*是一个危险的玩法(如果你添加或删除列)。这可能与goLang没问题,但应避免在ORM世界中使用通用(select *)。 –