## Sentinel-err-паттерн в Go **Контекст:** В сервисах `places.go` использовался `fmt.Errorf("not your place")`, что не позволяло проверить тип ошибки через `errors.Is()`. **Суть:** Sentinel errors — это именованные переменные-ошибки на уровне пакета, которые позволяют вызывающему коду проверять причину ошибки без парсинга строки. ```go var ( ErrNotYourPlace = errors.New("not your place") ErrPlaceNotFound = errors.New("place not found") ) // Использование: if !isModerator && place.OwnerID != input.OwnerID { return nil, fmt.Errorf("%w: user %s tried to update place %s", ErrNotYourPlace, input.OwnerID, input.ID) } // Проверка: if errors.Is(err, ErrNotYourPlace) { // вернуть 403 } ``` **Плюсы:** - `errors.Is()` работает стабильно - Можно добавить контекст через `%w` - Самодокументируемый код **Связанные заметки:** [[backend-auth-security]], [[backend-validation]] **Источник:** Code review: P0 fix в `services/places.go` #golang #backend #best-practice #error-handling