文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

golang中如何处理空值?

2024-02-12 12:53

关注

php小编鱼仔为您介绍golang中如何处理空值。在golang中,空值通常表示变量没有被赋值或者没有有效的值。为了处理空值,golang提供了多种方法。首先,可以使用条件语句(if语句)来检查变量是否为nil。其次,可以使用默认值来初始化变量,确保变量不为空。此外,还可以使用零值来代替空值,比如对于数字类型的变量,零值是0;对于字符串类型的变量,零值是空字符串。还可以使用指针来处理空值,通过判断指针是否为nil来确定变量是否为空。另外,golang还提供了一些特殊的数据类型,比如切片、映射和通道,它们在声明时默认为nil,可以通过判断是否为nil来处理空值。总之,golang提供了多种灵活的方式来处理空值,开发者可以根据具体场景选择合适的方法来处理空值。

问题内容

用户模型

type userexample struct {
    id       primitive.objectid `json:"id,omitempty"`
    name     string             `json:"name,omitempty"`
    location string             `json:"location,omitempty"`
    title    string             `json:"title,omitempty"`
}

更新用户

func updateuserexample() gin.handlerfunc {
    return func(c *gin.context) {
        ctx, cancel := context.withtimeout(context.background(), 10*time.second)
        userid := c.param("userid")
        var user models.userexample
        defer cancel()
        objid, _ := primitive.objectidfromhex(userid)

        //validate the request body
        if err := c.bindjson(&user); err != nil {
            c.json(http.statusbadrequest, responses.userresponseexample{
                status:  http.statusbadrequest,
                message: "error",
                data: map[string]interface{}{
                    "data": err.error()},
            })
        }

        update := bson.m{
            "name":     user.name,
            "location": user.location,
            "title":    user.title,
        }
        result, err := usercollectionexample.updateone(ctx, bson.m{
            "id": objid,
        }, bson.m{
            "$set": update,
        })
        if err != nil {
            c.json(http.statusinternalservererror, responses.userresponseexample{
                status:  http.statusinternalservererror,
                message: "error",
                data: map[string]interface{}{
                    "data": err.error(),
                }})
            return
        }

        //get update userexample detail
        var updateuser models.userexample
        if result.matchedcount == 1 {
            err := usercollectionexample.findone(ctx, bson.m{
                "id": objid,
            }).decode(&updateuser)
            if err != nil {
                c.json(http.statusinternalservererror, responses.userresponseexample{
                    status:  http.statusinternalservererror,
                    message: "error",
                    data: map[string]interface{}{
                        "data": err.error(),
                    }})
                return
            }
        }
        c.json(http.statusok, responses.userresponseexample{
            status:  http.statusok,
            message: "success",
            data: map[string]interface{}{
                "data": updateuser,
            },
        })
    }
}

我尝试通过邮递员更新数据,但如果 value == null 将从集合中删除

在这种情况下,我想更新用户的,在更新之前所有数据已经​​存在

邮递员

{
    "title": "user one"
}

它正在努力更改集合中的。但是,其他数据(名称和位置)已经消失

"data": {
            "id": "63d2ac86aeb9d78d3d5daf21",
            "title": "User One",
        }

那么,如何处理请求体中的空值?

我只想更改此案例的

解决方法

通常,此类部分更新是使用如下结构来处理的:

type userupdaterequest struct {
    id       primitive.objectid `json:"id,omitempty"`
    name     *string             `json:"name,omitempty"`
    location *string             `json:"location,omitempty"`
    title    *string             `json:"title,omitempty"`
}

注意指针。这样,api 调用者就可以为其想要更新的字段发送非零值。它还可以使用空字符串将字段值设置为空。

然后在数据库端,您必须创建一条更新语句:

updateFields:=bson.M{}
if request.Name!=nil {
   updateFields["name"]=*request.Name
}
if request.Location!=nil {
   updateFields["location"]=*request.Location
}
// etc.
update:=bson.M{"$set":updateFields}

然后使用update更新数据库记录。

以上就是golang中如何处理空值?的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯