gpt4 book ai didi

go - 将错误转换为映射或结构

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:42 25 4
gpt4 key购买 nike

刚开始使用 Go,目前正在尝试创建 REST API。使用 gormgin 来做同样的事情。我被卡住的地方是,我试图从 error 对象中获取一个值,但我无法以直接的方式做到这一点。

error 类型,如果我没记错的话,只有一个 Error 方法可用,它给出 Message 部分中的任何内容目的。这是我的错误对象。

{
"Severity": "ERROR",
"Code": "23505",
"Message": "duplicate key value violates unique constraint \"uix_users_email\"",
"Detail": "Key (email)=(johndoe@gmail.com) already exists.",
"Hint": "",
"Position": "",
"InternalPosition": "",
"InternalQuery": "",
"Where": "",
"Schema": "public",
"Table": "users",
"Column": "",
"DataTypeName": "",
"Constraint": "uix_users_email",
"File": "nbtinsert.c",
"Line": "433",
"Routine": "_bt_check_unique"
}

现在,我想做的是访问 Detail 键,但有点困惑。这是我目前为实现这一目标所做的工作:

if err := a.DB.Create(&user).Error; err != nil {
val, _ := json.Marshal(err)
m := make(map[string]string)
json.Unmarshal(val, &m)
context.JSON(422, gin.H{"error": m["Detail"]})
return
}

但这似乎有点矫枉过正。我必须 Marshal 错误,然后 Unmarshal 将其放入映射中,最后使用它。

有没有更简单的方法来做到这一点?

最佳答案

将其断言给 pq.Error 并访问字段 as explained in the pq docs :

if err, ok := err.(*pq.Error); ok {
fmt.Println("pq error:", err.Code.Name())
// Or whatever other field(s) you need
}

full type is also documented .

关于go - 将错误转换为映射或结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48027084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com