2017-06-06 133 views
0

測試數據:得到PostgreSQL數組結構與StructScan

CREATE TABLE test (id int, data text[]) 
INSERT INTO test(id, data) VALUES(1, '{a,b,c}') 

Go代碼。首先 - 一個工作得很好:

func main() { 
    db, _ := sqlx.Open("postgres", "user=postgres dbname=test sslmode=disable") 
    var id int 
    var asSlice []string 
    err := db.QueryRowx(`SELECT id, data FROM test WHERE data @> ARRAY['b']`).Scan(&id, pq.Array(&asSlice)) 
    if err != nil { 
    log.Fatal(err) 
    } 
    fmt.Println(id, asSlice) 
} 

我得到1 [a b c]如預期。使用StructScan

type MyStruct struct { 
    Id int 
    Data []string 
} 

func main() { 
    db, _ := sqlx.Open("postgres", "user=postgres dbname=test sslmode=disable") 
    var testStruct MyStruct 
    err := db.QueryRowx(`SELECT id, data FROM test WHERE data @> ARRAY['b']`).StructScan(&testStruct) 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Println(testStruct) 
} 

sql: Scan error on column index 1: unsupported Scan, storing driver.Value type []uint8 into type *[]string 

我想這意味着SQLX不知道PostgreSQL的陣列,並且不使用PQ - 但在這裏我手動分配結果的變量現在

,到不正常的部分。內部陣列。

我該怎麼辦?也許我做錯了什麼?或者,也許我應該手動應用pq.Array?如果是這樣 - 如何?

+0

@Melvin 「預期結構卻得到了片」。我只查詢一行。所以不是這樣。 – Davinel

回答

1

嘗試使用pq.StringArray類型[]字符串

type MyStruct struct { 
    Id int 
    Data pq.StringArray 
} 
+1

謝謝。這正是我需要的。 – Davinel