package db import ( "database/sql" "fmt" ) func (c *Client) QueryRows(query string) ([]map[string]interface{}, error) { if c.Conn == nil { return nil, fmt.Errorf("database connection is nil") } rows, err := c.Conn.Query(query) if err != nil { return nil, fmt.Errorf("query error: %v", err) } defer func(rows *sql.Rows) { err := rows.Close() if err != nil { fmt.Println("关闭资源失败") } }(rows) // 获取列名 cols, err := rows.Columns() if err != nil { return nil, err } var result []map[string]interface{} for rows.Next() { // 创建扫描用的切片 columnPointers := make([]interface{}, len(cols)) columnValues := make([]interface{}, len(cols)) for i := range columnPointers { columnPointers[i] = &columnValues[i] } if err := rows.Scan(columnPointers...); err != nil { return nil, err } rowMap := make(map[string]interface{}) for i, colName := range cols { val := columnValues[i] if b, ok := val.([]byte); ok { rowMap[colName] = string(b) } else { rowMap[colName] = val } } result = append(result, rowMap) } if err := rows.Err(); err != nil { return nil, err } return result, nil }