l'éditeur php Yuzai vous présente comment gérer les valeurs nulles dans Golang. En golang, une valeur nulle signifie généralement que la variable n'a pas reçu de valeur ou n'a pas de valeur valide. Pour gérer les valeurs nulles, golang propose plusieurs méthodes. Tout d’abord, vous pouvez utiliser une instruction conditionnelle (instruction if) pour vérifier si une variable est nulle. Deuxièmement, vous pouvez initialiser la variable avec une valeur par défaut pour vous assurer qu'elle n'est pas vide. De plus, vous pouvez également utiliser une valeur zéro au lieu d'une valeur nulle. Par exemple, pour une variable de type numérique, la valeur zéro est 0 ; pour une variable de type chaîne, la valeur zéro est une chaîne vide. Vous pouvez également utiliser des pointeurs pour gérer les valeurs nulles et déterminer si une variable est nulle en jugeant si le pointeur est nul. De plus, golang fournit également certains types de données spéciaux, tels que des tranches, des cartes et des canaux, qui par défaut sont nuls lorsqu'ils sont déclarés, et peuvent gérer les valeurs nulles en déterminant si elles sont nulles. En bref, Golang offre une variété de méthodes flexibles pour gérer les valeurs nulles, et les développeurs peuvent choisir la méthode appropriée pour gérer les valeurs nulles en fonction de scénarios spécifiques.
Modèle utilisateur
type userexample struct { id primitive.objectid `json:"id,omitempty"` name string `json:"name,omitempty"` location string `json:"location,omitempty"` title string `json:"title,omitempty"` }
Mettre à jour l'utilisateur
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, }, }) } }
J'ai essayé de mettre à jour les données via postman mais si value == null elles seront supprimées de la collection
Dans ce cas, je souhaite mettre à jour le titre de l'utilisateur, avant de mettre à jour toutes les données sont déjà là
Facteur
{ "title": "user one" }
Il travaille sur le changement du titre dans la collection. Cependant, d'autres données (nom et localisation) ont disparu
"data": { "id": "63d2ac86aeb9d78d3d5daf21", "title": "User One", }
Alors, comment gérer les valeurs nulles dans le corps de la requête ?
Je veux juste changer le titre de ce cas
Habituellement, ces mises à jour partielles sont gérées à l'aide d'une structure comme celle-ci :
type userupdaterequest struct { id primitive.objectid `json:"id,omitempty"` name *string `json:"name,omitempty"` location *string `json:"location,omitempty"` title *string `json:"title,omitempty"` }
Faites attention aux pointeurs. De cette façon, les appelants d'API peuvent envoyer des valeurs non nulles pour les champs qu'ils souhaitent mettre à jour. Il peut également utiliser une chaîne vide pour définir la valeur du champ sur null.
Ensuite, côté base de données, vous devez créer une instruction de mise à jour :
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}
Ensuite, utilisez update
pour mettre à jour l'enregistrement de la base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!