2016-08-17 74 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 *)。 –