我對(duì) Go 中的特定表有兩個(gè)查詢 - 一個(gè)用于檢索單個(gè)項(xiàng)目,另一個(gè)用于返回列表。第一個(gè)使用sql.DB.QueryRow是因?yàn)樗恍枰獧z索一行,第二個(gè)用于sql.DB.Query返回幾個(gè)不同的結(jié)果。問(wèn)題是序列化需要一些工作,我想通過(guò)使用從數(shù)據(jù)庫(kù)行掃描并將其讀入 Go 類(lèi)型的單一方法來(lái)完成它。我的代碼現(xiàn)在看起來(lái)像:// Some type which varies considerably from its DB representation, and takes some effort to serialize.type Foo struct { Baz *Baz Board [8][8]int}// Get one foo by its idfunc GetFoo(id int) { row := db.QueryRow("select * from foo where id = ?", id) // Work that's duplicated from below... var foo Foo row.Scan(&foo.blah, &foo.etc) // Do more work to serialize the type...}// Get all of the fooesfunc GetFooes() { rows, err := db.Query("select * from foo") for rows.Next() { // Work that's duplicated from above... var foo Foo rows.Scan(&foo.blah, &foo.etc) // Do more work to serialize the type... }}然而,事實(shí)證明將 row.Scan 和 rows.Scan 結(jié)合起來(lái)有點(diǎn)棘手。我以為我可以使用類(lèi)似的東西:func serializeFoo(scanner sql.Scanner) (*Foo, error) {}盡管 sql.Scanner 需要單個(gè)(value interface{})而不是(...value interface{}).這里有什么建議嗎?另一種解決方案是將單個(gè)QueryRow調(diào)用轉(zhuǎn)換為db.Query.
- 1 回答
- 0 關(guān)注
- 1285 瀏覽
添加回答
舉報(bào)
0/150
提交
取消