package config import ( "database/sql" ) type Results struct { Columns []string Rows [][]string } func SQLExecute(db *sql.DB, q string) (*Results, error) { if q == "" { return nil, nil } rows, err := db.Query(q) //rows, err := db.Query(q) if err != nil { return nil, err } columns, err := rows.Columns() if err != nil { return nil, err } var results [][]string for rows.Next() { rs := make([]sql.NullString, len(columns)) rsp := make([]interface{}, len(columns)) for i := range rs { rsp[i] = &rs[i] } if err = rows.Scan(rsp...); err != nil { break } _rs := make([]string, len(columns)) for i := range rs { _rs[i] = rs[i].String } results = append(results, _rs) } if closeErr := rows.Close(); closeErr != nil { return nil, closeErr } if err != nil { return nil, err } if err := rows.Err(); err != nil { return nil, err } return &Results{ Columns: columns, Rows: results, }, nil }