登录
首页 >  Golang >  Go问答

golang中的HTTP PATCH方法

来源:stackoverflow

时间:2024-03-07 17:36:25 191浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《golang中的HTTP PATCH方法》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我正在golang和postgresql中实现http patch方法,我需要从请求中读取数据并将提供的数据更新到postgresql中。

如果提供了结构体的所有值,则该方法可以正常工作,但如果仅向请求提供部分数据,则其他字段将变为空。谁能帮我解决这个问题。

type StudentDetails struct {
    Id int `json:"id"`
    Name string `json:"name"`
    Age int `json:"age"`
    Class int `json:"class"`
}

查询我正在使用的“update table_name set name=$2,age=$3,class=$4 where id=$1”

如果请求中给出的所有字段都工作正常,但如果我只需要更新 age,则请求 json 将是 {"age": 10} 或我们不知道的其他字段。这里年龄设置为10,但其余所有字段将变为“”或0,并将更新到数据库中

谁有解决这个问题的办法,如何只更新请求的字段而不更改其他字段。

我已经尝试对所有字段使用单独的查询,但我认为这不合适。请给我一个解决方案


正确答案


就像 @david hall 在评论中所说的那样,在结构体的字段中使用指向类型的指针。请参阅下面的示例:

type articlemodel struct {
    gorm.model
    id    uuid.uuid `gorm:"primarykey;type:uuid"`
    title *string
    body  *string
 }

我正在使用 gorm,那么当从 http 请求解组 json 时,如果未提供,您将获得 nil 值。您需要添加 nil 检查器以在 sql 查询的构造中跳过。像这样的东西。

if entity.Title != nil {
    model.Title = entity.Title
 }

 if entity.Body != nil {
    model.Body = entity.Body
 }

 db.Save(&model)

现在下一个问题是如何有意清空数据库中的字段(显式清空值),例如 update 表 set 字段 = null。不幸的是我也没有弄清楚。

我想到的是检查是否为空字符串并将其视为将其设置为空值。虽然我想看到更好的选择。

理论要掌握,实操不能落!以上关于《golang中的HTTP PATCH方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>