Обработка текста ошибки

У меня есть БД где имена пользователей и 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. Нужно для того, чтобы добавить кастомный текст ошибки.

→ Ссылка