在Golang中处理MySQL 1045错误的最佳方法是什么?

huangapple go评论70阅读模式
英文:

Best way to handling MySQL 1045 Error in Golang

问题

我有一个控制MYSQL错误1045的代码,

res, err := stmt.Exec(Status, Message, Number)
if err != nil {
	if err.(*mysql.MySQLError).Number == 1045 {
		log.Error(err)
		stmt.Close()
		DatabaseErrorHandling() // 用于重新连接数据库
		return false
	} else {
		log.Error(err)
		return true
	}
}

但是出现了这样的错误

panic: 接口转换: 错误是*errors.errorString,而不是*mysql.MySQLError

有没有类似的代码可以工作?

有没有办法处理这个错误?

英文:

I have a code that control MYSQL Error 1045,

res, err := stmt.Exec(Status, Message, Number)
if err != nil {
	if err.(*mysql.MySQLError).Number == 1045 {
		log.Error(err)
		stmt.Close()
		DatabaseErrorHandling() // used for reCONNECT database
		return false
	} else {
		log.Error(err)
		return true
	}
}

But Error happened like that

panic: interface conversion: error is *errors.errorString, not *mysql.MySQLError

Is there code working like that ?

Any way to handle this error ?

答案1

得分: 3

这个失败是因为错误类型不是你所期望的类型。使用errors.As来验证和转换错误:

var dbErr *mysql.MySQLError
if errors.As(err, &dbErr) {
  // 在这里处理 dbErr
} else {
  // 不是 dbErr。在这里处理 err
}
英文:

This is failing because the error is not of the type you expect. Use errors.As to verify and convert the error:

var dbErr *mysql.MySQLError
if errors.As(err,&dbErr) {
  // Handle dbErr here
} else {
  // Not a dbErr. Deal with err here.
}

huangapple
  • 本文由 发表于 2022年5月10日 01:03:02
  • 转载请务必保留本文链接:https://go.coder-hub.com/72175729.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定