我真的很困惑如何使用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
}
我可以打印错误,但它只是一个字符串,不喜欢偷看字符串以了解出错的想法,是否没有反馈来获取错误代码来执行switch
或沿着这些行?你是怎么做到的?
答案 0 :(得分:6)
实际上,检查错误字符串的内容是一种不好的做法,字符串值可能会因驱动程序verison而异。比较错误数以识别特定错误是更好和更健壮的。
mysql 驱动程序有错误代码,package与主驱动程序包分开维护。但是,执行此操作的机制因驱动程序而异,因为这不是数据库/ sql本身的一部分。使用该包,您可以检查错误类型MySQLError
:
if driverErr, ok := err.(*mysql.MySQLError); ok {
if driverErr.Number == mysqlerr.ER_ACCESS_DENIED_ERROR {
// Handle the permission-denied error
}
}
还有错误variables
。
<子> Ref 子>
答案 1 :(得分:1)
通常在包中你可以看到变量,如果包作者想要分开错误,为每个包创建变量,如: https://golang.org/pkg/database/sql/#pkg-variables
你可以看到错误,你可以在返回时切换错误,并为每个错误变量添加一个错误。
示例:
result, err := db.Exec("INSERT INTO users (username,password,email) VALUES (?,?,?)", username, hashedPassword, email)
if err == sql.ErrNoRows {
// handle error
return
}
if err == sql.ErrTxDone {
// handle error
return
}