package db import ( "database/sql" "fmt" ) func (c *Client) QueryRows(query string, args ...any) ([]map[string]any, error) { if c.Conn == nil { return nil, fmt.Errorf("database connection is nil") } rows, err := c.Conn.Query(query, args...) if err != nil { return nil, err } defer func(rows *sql.Rows) { _ = rows.Close() }(rows) // 获取列名 columns, err := rows.Columns() if err != nil { return nil, err } results := make([]map[string]any, 0) for rows.Next() { // 为每列创建一个接口值的 slice values := make([]any, len(columns)) valuePtrs := make([]any, len(columns)) for i := range columns { valuePtrs[i] = &values[i] } if err := rows.Scan(valuePtrs...); err != nil { return nil, err } rowMap := make(map[string]any) for i, col := range columns { rowMap[col] = values[i] } results = append(results, rowMap) } if err := rows.Err(); err != nil { return nil, err } return results, nil }