Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menangani nilai nol dalam golang?

Bagaimana untuk menangani nilai nol dalam golang?

PHPz
PHPzke hadapan
2024-02-12 12:09:091131semak imbas

Bagaimana untuk menangani nilai nol dalam golang?

editor php Yuzai memperkenalkan kepada anda cara mengendalikan nilai nol dalam golang. Dalam golang, nilai nol biasanya bermaksud bahawa pembolehubah belum diberikan nilai atau tidak mempunyai nilai yang sah. Untuk mengendalikan nilai nol, golang menyediakan pelbagai kaedah. Pertama, anda boleh menggunakan pernyataan bersyarat (jika pernyataan) untuk menyemak sama ada pembolehubah adalah sifar. Kedua, anda boleh memulakan pembolehubah dengan nilai lalai untuk memastikan pembolehubah itu tidak kosong. Selain itu, anda juga boleh menggunakan nilai sifar dan bukannya nilai nol Contohnya, untuk pembolehubah jenis angka, nilai sifar ialah 0 untuk pembolehubah jenis rentetan, nilai sifar ialah rentetan kosong. Anda juga boleh menggunakan penunjuk untuk mengendalikan nilai nol dan menentukan sama ada pembolehubah adalah nol dengan menilai sama ada penuding adalah nol. Selain itu, golang juga menyediakan beberapa jenis data khas, seperti kepingan, peta, dan saluran, yang lalai kepada nil apabila diisytiharkan, dan boleh mengendalikan nilai nol dengan menentukan sama ada ia adalah nil. Ringkasnya, golang menyediakan pelbagai cara yang fleksibel untuk mengendalikan nilai nol, dan pembangun boleh memilih kaedah yang sesuai untuk mengendalikan nilai nol berdasarkan senario tertentu.

Kandungan soalan

Model pengguna

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

Kemas kini pengguna

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,
            },
        })
    }
}

Saya cuba mengemas kini data melalui posmen tetapi jika nilai == null ia akan dialih keluar daripada koleksi

Dalam kes ini saya ingin mengemas kini tajuk pengguna, sebelum mengemas kini semua data sudah ada

Posmen

{
    "title": "user one"
}

Ia sedang berusaha untuk menukar tajuk dalam koleksi. Walau bagaimanapun, data lain (nama dan lokasi) telah hilang

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

Jadi, bagaimana untuk menangani nilai nol dalam badan permintaan?

Saya cuma nak tukar tajuk kes ini

Penyelesaian

Biasanya, kemas kini separa seperti ini dikendalikan menggunakan struktur seperti ini:

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

Perhatikan petunjuk. Dengan cara ini, pemanggil API boleh menghantar nilai bukan sifar untuk medan yang ingin mereka kemas kini. Ia juga boleh menggunakan rentetan kosong untuk menetapkan nilai medan kepada null.

Kemudian di bahagian pangkalan data anda perlu membuat kenyataan kemas kini:

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}

Kemudian gunakan update untuk mengemas kini rekod pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk menangani nilai nol dalam golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam