当我在postgres中收到错误时,我无法检索错误代码。
在我的程序测试中,我知道我会收到以下错误 “pq:重复键值违反了唯一约束”associations_pkey“”。
查看postgres文档,这很可能是pq错误代码23505。
我需要在我的Go程序中获取该数字,以便我可以检查不同类型的错误并以有用的方式响应最终用户。
但是,我似乎无法抓住Go中的错误代码,只显示错误消息。我的代码如下:
stmt, _ := DB.Prepare("INSERT INTO table (column_1) VALUES ($1)")
_, err = stmt.Exec("12324354")
if err != nil {
log.Println("Failed to stmt .Exec while trying to insert new association")
log.Println(err.Error())
fmt.Println(err.Code())
} else {
Render.JSON(w, 200, "New row was created succesfully")
}
答案 0 :(得分:6)
您需要键入将错误声明为类型*pq.Error
:
pqErr := err.(*pq.Error)
log.Println(pqErr.Code)
答案 1 :(得分:3)
这是written in the documentation。如您所见,您可以通过以下方式提取它:
if err, ok := err.(*pq.Error); ok {
fmt.Println(err.Code)
}
不要忘记从导入_ "github.com/lib/pq"
中删除下划线。如您所见err
有一个lot of information about the error(不仅Code
还有许多其他人)。
请注意,您无法将其直接与某些代码进行比较(它是ErrorCode type
)。
所以你必须将它转换为字符串并与字符串进行比较。