Провети ревью код.
Условие
Заголовок раздела «Условие»Провети ревью код.
// Code-review// Вводные - есть условный репозиторий, стандартные CRUD методы.// Есть некая доменная модель и модель для БД и некая ORM для построения запросов.// Цель - подсветить критичные места, ошибки или указать как сделать лучше.
func (s *Storage) CreateProduct(ctx context.Context, wp *model.Product) error { dbM := ProductModelToDB(ctx, wp)
_, err := s.db.NewInsert().Model(&dbM).Exec(ctx) if err != nil { return errors.Wrap(err, "CreateProduct ") }
return nil}
func (s *Storage) ReadProduct(ctx context.Context, wp *model.Product) (*model.Product, error) { dbIn := ProductModelToDB(ctx, wp) dbM := Product{}
err := s.db.NewSelect(). Model(&dbM). Where("wp.id = ?", dbIn.ID). Scan(ctx) if err != nil { return nil, errors.Wrap(err, "ReadProduct ") }
dbOut := dbIn.ToModel(ctx)
return &dbOut, nil}
func (s *Storage) UpdateProduct(ctx context.Context, wp *model.Product) error { dbIn := ProductModelToDB(ctx, wp) values := s.db.NewValues(&dbIn)
_, err := s.db.NewUpdate(). With("_data ", values). Model(&Product{}). TableExpr("_data "). Set("guid = _data.guid "). Where("wp.guid = _data.id "). Exec(ctx) if err != nil { return errors.Wrap(err, "UpdateProduct ") }
return nil}
func (s *Storage) DeleteProduct(ctx context.Context, wp *model.Product) error { dbM := ProductModelToDB(ctx, wp)
_, err := s.db.NewDelete(). Model(&Product{}). Where("wp.id ", dbM.ID). Exec(ctx) if err != nil { return errors.Wrap(err, "DeleteProduct ") }
return nil}- Разница в поведении Fatal и panic() в го
- Что произойдет если горутина спаникует, получим ли мы панику в мейне
- Отличие errors.Wrap() и fmt.Errorf()
Решение
Заголовок раздела «Решение»Источник: Vseinstrumenti / ВсеИнструменты
← Что выведет? · Все задачи · Go · Написать программу, которая выводит чис… →