守着一只汪
您可以从结果行集中获取列名并为扫描准备一个切片。示例(https://go.dev/play/p/ilYmEIWBG5S):package mainimport ( "database/sql" "fmt" "log" "github.com/DATA-DOG/go-sqlmock")func main() { // mock db db, mock, err := sqlmock.New() if err != nil { log.Fatal(err) } columns := []string{"id", "status"} mock.ExpectQuery("SELECT \\* FROM table"). WillReturnRows(sqlmock.NewRows(columns).AddRow(1, "ok")) // actual code rows, err := db.Query("SELECT * FROM table") if err != nil { log.Fatal(err) } cols, err := rows.Columns() if err != nil { log.Fatal(err) } data := make([]interface{}, len(cols)) strs := make([]sql.NullString, len(cols)) for i := range data { data[i] = &strs[i] } for rows.Next() { if err := rows.Scan(data...); err != nil { log.Fatal(err) } for i, d := range data { fmt.Printf("%s = %+v\n", cols[i], d) } }}此示例将所有列读入字符串。要检测列类型,可以使用rows.ColumnTypes方法。