我有一個結構,看起來像:如何將結構指針轉換爲指針類型的列表中去
type inv struct {
ID int `json:"id"`
Name string `json:"name"`
}
我從數據庫中查詢一些數據(假設沒有錯誤):
rows, err := db.Query("select id, name from inv_table")
通常情況下,我不得不通過掃描
var i inv
for rows.Next() {
rows.Scan(&i.ID, &i.Name)
}
我想這可能工作(被測試噸至拉離該行的數據明天):
var i inv
for rows.Next() {
var x []interface{} = [&i.ID, &i.Name]
rows.Scan(x...)
}
實際上,我在查詢的結果集中有更多的列。
rows.Scan(&i)
或至少:
rows.Scan(getExportedValuePointers(&i)...)
我想我可以總是寫某種編碼器,但是,在我看來,應該有東西在框中已經。
**我意識到我總是可以編寫一些類似於encode/xml或encode/json的反射代碼......但我希望有人已經完成了它。
UPDATE:下面的代碼工作正常,但不是因爲我想:
package main
import "fmt"
type inv struct {
A int
B string
}
func main() {
var i inv
fmt.Printf("hello\n")
n, err := fmt.Sscan("1 c", &i.A, &i.B)
fmt.Printf("retval: %d %#v\n", n, err)
fmt.Printf("retval: %d, %s, %d %#v\n", i.A, i.B, n, err)
j := []interface{}{&i.A, &i.B}
k := []interface{}{i.A, i.B}
n, err = fmt.Sscan("2 d", j...)
fmt.Printf("retval: %d, %s, %d %#v\n", i.A, i.B, n, err)
fmt.Printf("retval: %d, %s\n", k...)
}
您是否試圖從下拉數據行該數據庫並只根據特定列而不是所有列創建「inv」類型的切片? – Nucleon