closing note:
This question does not ask “how can I find the number of columns returned?” which is len(row.Columns()). It is asking a Go-related question concerning the rows.Scan()
function.
How can I extract all the columns in a row into a slice or equivalent? For example
rows, err := db.Query("select * from foo") for rows.Next() { fmt.Printf("%+vn", rows)
I would like to extract the data in lastcols
as a slice.
&{dc:0xc000486000 releaseConn:0x5e20c0 rowsi:0xc0000cf180 cancel:<nil> closeStmt:<nil> closemu:{w:{state:0 sema:0} writerSem:0 readerSem:0 readerCount:0 readerWait:0} closed:false lasterr:<nil> lastcols:[abc 123 foo {wall:0 ext:0 loc:0xc0000ec000}]}
context:
- for debugging, I would like to
select * from sometable
and display the results without knowing the table format in advance. - github.com/lib/pg SQL driver.
Advertisement
Answer
You can find the Columns with rows.Columns()
then you can make a slice to fetch the data.
columns, err := rows.Columns() if err != nil { return err } values := make([]interface{}, len(columns)) for i := range values { values[i] = new(interface{}) } err = rows.Scan(values...) if err != nil { return err }