簡體   English   中英

將行掃描成切片

[英]Scan row into slice

我想將 sql.Row 掃描成一個切片,如下所示:

func printRows(rows *sql.Rows){
    defer rows.Close()

    for rows.Next() {
        var row = []interface{}{}
        err := rows.Scan(row...)
        if err != nil {
            log.Fatal(err)
        }
        r, err := json.Marshal(row)
        if err != nil {
            log.Fatal(err)
        }
        log.Println("row:", r);
    }
}

但我收到此錯誤:

2020/02/23 20:05:14 原始查詢:SELECT * FROM user_table LIMIT 500 2020/02/23 20:05:14 sql:掃描中預期有 6 個目的地 arguments,而不是 0

任何人都知道如何在不使用切片的情況下制作這個通用的?

你可以這樣做:

cols, err := rows.Columns() // Remember to check err afterwards
vals := make([]interface{}, len(cols))
for i, _ := range cols {
    vals[i] = new(string)
}

for rows.Next() {
    err = rows.Scan(vals...)
}

在 inte.net 上,他們說您可以使用:

    vals[i] = new(sql.RawBytes)

代替

    vals[i] = new(string)

但我認為 (string) 很好,idk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM