Обработка текста ошибки
У меня есть БД где имена пользователей и email являются уникальными значениями. Если пользователь пытаетсявнести имя пользователя повторно хотелось бы сообщить его об этом. мой код выглядит таким образом:
insert, err := db.Query(fmt.Sprintf("SQL"))
if err != nil{
fmt.Println(err)
}
При выполнении условия выдается ошибка
Error 1062: Duplicate entry '[email protected]' for key 'Email'
2022/05/23 04:54:33 http: panic serving 127.0.0.1:49679: runtime error: invalid memory address or nil pointer dereference.....
Можно ли как то получить только текст Duplicate entry '[email protected]' for key 'Email' ?
Ответы (1 шт):
Автор решения: aksioto
→ Ссылка
Можно сделать обработку ошибки таким образом:
insert, err := db.Query(fmt.Sprintf("SQL"))
if err != nil {
if mysqlErr, ok := err.(*mysql.MySQLError); ok && mysqlErr.Number == 1062 {
fmt.Println(mysqlErr.Message)
}
}
Кастим ошибку к структуре *mysql.MySQLError. Если получилось, то выводим только сообщение без номера mysqlErr.Message
Проверку номера ошибки можно убрать из if. Нужно для того, чтобы добавить кастомный текст ошибки.