Rumah >pembangunan bahagian belakang >Golang >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.
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
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!