如何在golang中获取mySQL错误类型?

Sir*_*Sir 1 mysql error-handling go

我真的很困惑如何使用mySQL导入从失败的查询行获取错误类型.没有真正的文档,所以它让我真的很困惑.

目前我有:

result, err := db.Exec("INSERT INTO users (username,password,email) VALUES (?,?,?)", username, hashedPassword, email)
if err != nil {
    // handle different types of errors here
    return
}
Run Code Online (Sandbox Code Playgroud)

我可以打印错误,但它只是一个字符串,不喜欢偷看字符串的想法,知道出了什么问题,是否没有反馈来获取错误代码来执行switchon或沿着这些线?你怎么做呢?

Зел*_*ный 7

实际上,检查错误字符串的内容是一种不好的做法,字符串值可能会因驱动程序verison而异.比较错误号以识别特定错误是更好和更健壮的.

mysql驱动程序有错误代码,该与主驱动程序包分开维护.但是,执行此操作的机制因驱动程序而异,因为这不是数据库/ sql本身的一部分.使用该包,您可以检查错误类型MySQLError:

if driverErr, ok := err.(*mysql.MySQLError); ok {
    if driverErr.Number == mysqlerr.ER_ACCESS_DENIED_ERROR {
        // Handle the permission-denied error
    }
}
Run Code Online (Sandbox Code Playgroud)

还有错误variables.

参考