Перейти к содержимому

Провети ревью код.

go · basicsVseinstrumenti / ВсеИнструментыне решено

Провети ревью код.

// 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 · Написать программу, которая выводит чис… →