从Go中的postgres获取错误代码

Cyb*_*urk 7 postgresql error-handling go

当我在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")
}
Run Code Online (Sandbox Code Playgroud)

Ain*_*r-G 10

您需要键入断言错误类型*pq.Error:

pqErr := err.(*pq.Error)
log.Println(pqErr.Code)
Run Code Online (Sandbox Code Playgroud)


Sal*_*ali 6

写在文档中。如您所见,您可以通过以下方式提取它:

if err, ok := err.(*pq.Error); ok {
    fmt.Println(err.Code)
}
Run Code Online (Sandbox Code Playgroud)

不要忘记从导入中删除下划线_ "github.com/lib/pq"。如您所见,err很多有关该错误的信息(不仅有Code很多其他信息)。

请注意,您不能将它直接与某些代码进行比较(它是的ErrorCode type)。

因此,您必须将其转换为字符串并与字符串进行比较。

https://godoc.org/github.com/lib/pq#Error