Подскажите пожалуйста, как правильно обрабатывать sql ошибки? Использую pgx, сейчас обрабатываю ошибки таким образом:
if err != nil {
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) {
if pgErr.Code == "23505" {
w.Write([]byte("Email is already exists"))
return
}
}
}
но честно говоря думаю что это не совсем верный способ.
loljapanes,
errorHandler просто для примера написал. Можно сразу после if обрабатывать ошибку, а можно вынести обработку ошибок в отдельную функцию и там формировать вывод для пользователя.
Что касается первого вопроса, действительно, советуют обрабатывать через "As".
Тогда возвращаясь к первоначальному вопросу, основная проблема тут в magic number "23505". Если в библиотеке нет списка человекочитаемых констант с номерами ошибок (я не нашел), можно завести свой. Например:
И далее в программе сравнивать по названию констант:
if err != nil {
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) {
if pgErr.Code == pgerrorcode.UniqueConstrintViolation {
w.Write([]byte("Email is already exists"))
return
}
}
}