2013-07-25 56 views
2

基本上,沒有事先知道什麼是導致查詢的結構可能是,我想查詢數據庫,並返回一個結構像這樣(JSON-Y)有沒有辦法在golang中使用package database/sql來獲取Column的Type?

// Rows 
[ 
    // Row 1 
    [ 
     { ColumnName: "id", Value: 1, Type: int }, 
     { ColumnName: "name", Value: "batman", Type: string }, 
     ... 
    ], 

    // Row 2 
    [ 
     { ColumnName: "id", Value: 2, Type: int }, 
     { ColumnName: "name", Value: "superman", Type: string }, 
     ... 
    ] 
] 

有沒有一種辦法在golang中使用包數據庫/ sql獲取列的類型?

我懷疑是我想要做的就是

  1. 使接口的數組{}列()的大小,
  2. 然後爲每列確定它的類型,
  3. 然後填充數組的指針於該類型,
  4. 然後傳遞數組掃描()

這是一個小像012這樣的代碼示例,但沒有首先知道數據將被填充的Struct。

+0

這可以通過掃描到一個空的界面,然後在字段上進行類型切換來實現。查看http://blog.golang.org/json-and-go(特定於JSON,但請查看「解碼任意數據」部分)和http://golang.org/ref/spec#Type_switches。另請查看http://golang.org/pkg/database/sql/#Scanner獲取支持的類型。 – Intermernet

回答

0

使用數據庫/ sql?沒有(據我所知)。

但是你可以使用this code任意查詢。而json.Marshall()從JSON包將使用反射來確定要輸出的值的正確方法,所以你可以有這樣的結構:

type Column struct { 
    ColumnName string 
    ColumnValue interface{} 
    ColumnType string 
} 

然後用reflect.TypeOf(someVariable).String()拿到類型ColumnType。

相關問題