Сканирование строки в срез - PullRequest
1 голос
/ 24 февраля 2020

Я хочу отсканировать sql. Ряд в срез, например, так:

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 целевых аргументов в Scan, а не 0

кто-нибудь знает, как сделать это дженери c без использования ломтика?

1 Ответ

1 голос
/ 24 февраля 2020

Вы можете сделать это следующим образом:

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 rnet говорят, что вы можете использовать:

    vals[i] = new(sql.RawBytes)

вместо

    vals[i] = new(string)

но я думаю (строка) в порядке, idk

...