Sobes.tech
Principal
17

func (r *OrderRepository) GetActiveOrderIDs(ctx context.Context, offset, limit int) ([]uint32, error) { var ( res []uint32 args []interface{} ) query := `SELECT id FROM "order" WHERE is_terminated = false LIMIT $1 OFFSET $2;` args = append(args, limit, offset) rows, err := r.slave.Query(ctx, query, args...) if err != nil { return nil, err } for rows.Next() { var orderID uint32 if err = rows.Scan(&orderID); err != nil { return nil, err } res = append(res, orderID) } return res, nil }

Компании, где спрашивали
101ХР101ХР

Ответ от нейросети

sobes.tech AI

В данном коде на Go реализована функция для получения ID активных заказов с пагинацией (offset и limit). Код в целом корректен, но есть несколько моментов, которые можно улучшить:

  1. Порядок LIMIT и OFFSET в SQL обычно LIMIT $1 OFFSET $2, что соблюдено.
  2. Лучше использовать defer rows.Close() сразу после проверки ошибки, чтобы гарантировать закрытие курсора.
  3. Можно использовать rows.Err() после цикла для проверки ошибок итерации.

Пример улучшенного варианта:

func (r *OrderRepository) GetActiveOrderIDs(ctx context.Context, offset, limit int) ([]uint32, error) {
    var res []uint32

    query := `SELECT id FROM "order" WHERE is_terminated = false LIMIT $1 OFFSET $2;`

    rows, err := r.slave.Query(ctx, query, limit, offset)
    if err != nil {
        return nil, err
    }
    defer rows.Close()

    for rows.Next() {
        var orderID uint32
        if err := rows.Scan(&orderID); err != nil {
            return nil, err
        }
        res = append(res, orderID)
    }

    if err := rows.Err(); err != nil {
        return nil, err
    }

    return res, nil
}

Таким образом, функция безопасно закрывает ресурсы и корректно обрабатывает ошибки.