您可以使用Rows.Columns,例如
package mainimport ( "database/sql" "fmt" "github.com/lib/pq")type Vehicle struct { Id int Name string Wheels int}// VehicleCol returns a reference for a column of a Vehiclefunc VehicleCol(colname string, vh *Vehicle) interface{} { switch colname { case "id": return &vh.Id case "name": return &vh.Name case "wheels": return &vh.Wheels default: panic("unknown column " + colname) }}func paniconErr(err error) { if err != nil { panic(err.Error()) }}func main() { conn, err := pq.ParseURL(`postgres://docker:docker@172.17.0.2:5432/pgsqltest?schema=public`) paniconErr(err) var db *sql.DB db, err = sql.Open("postgres", conn) paniconErr(err) var rows *sql.Rows rows, err = db.Query("select * from vehicle") paniconErr(err) // get the column names from the query var columns []string columns, err = rows.Columns() paniconErr(err) colNum := len(columns) all := []Vehicle{} for rows.Next() { vh := Vehicle{} // make references for the cols with the aid of VehicleCol cols := make([]interface{}, colNum) for i := 0; i < colNum; i++ { cols[i] = VehicleCol(columns[i], &vh) } err = rows.Scan(cols...) paniconErr(err) all = append(all, vh) } fmt.Printf("%#vn", all)}


