Bagaimana untuk menangani nilai nol dalam golang?

PHPz
Lepaskan: 2024-02-12 12:09:09
ke hadapan
1098 orang telah melayarinya

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"`
}
Salin selepas log masuk

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,
            },
        })
    }
}
Salin selepas log masuk

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"
}
Salin selepas log masuk

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

"data": {
            "id": "63d2ac86aeb9d78d3d5daf21",
            "title": "User One",
        }
Salin selepas log masuk

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"`
}
Salin selepas log masuk

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}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!