php-Editor Yuzai stellt Ihnen vor, wie Sie mit Nullwerten in Golang umgehen. In Golang bedeutet ein Nullwert normalerweise, dass der Variablen kein Wert zugewiesen wurde oder sie keinen gültigen Wert hat. Um Nullwerte zu verarbeiten, bietet Golang mehrere Methoden. Erstens können Sie eine bedingte Anweisung (if-Anweisung) verwenden, um zu prüfen, ob eine Variable Null ist. Zweitens können Sie die Variable mit einem Standardwert initialisieren, um sicherzustellen, dass die Variable nicht leer ist. Darüber hinaus können Sie anstelle eines Nullwerts auch einen Nullwert verwenden. Bei einer numerischen Variablen ist der Nullwert beispielsweise 0; bei einer Zeichenfolgenvariablen ist der Nullwert eine leere Zeichenfolge. Sie können Zeiger auch verwenden, um Nullwerte zu verarbeiten und festzustellen, ob eine Variable null ist, indem Sie beurteilen, ob der Zeiger Null ist. Darüber hinaus bietet Golang auch einige spezielle Datentypen wie Slices, Maps und Channels, die bei der Deklaration standardmäßig auf Null gesetzt sind und Nullwerte verarbeiten können, indem bestimmt wird, ob sie Null sind. Kurz gesagt, Golang bietet eine Vielzahl flexibler Möglichkeiten zum Umgang mit Nullwerten, und Entwickler können basierend auf bestimmten Szenarien die geeignete Methode zum Umgang mit Nullwerten auswählen.
Benutzermodell
type userexample struct { id primitive.objectid `json:"id,omitempty"` name string `json:"name,omitempty"` location string `json:"location,omitempty"` title string `json:"title,omitempty"` }
Benutzer aktualisieren
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, }, }) } }
Ich habe versucht, die Daten per Postbote zu aktualisieren, aber wenn der Wert == null ist, werden sie aus der Sammlung entfernt
In diesem Fall möchte ich den Titel des Benutzers aktualisieren, bevor die Aktualisierung aller Daten bereits erfolgt ist
Postbote
{ "title": "user one" }
Es wird daran gearbeitet, den Titel in der Sammlung zu ändern. Andere Daten (Name und Standort) sind jedoch verschwunden
"data": { "id": "63d2ac86aeb9d78d3d5daf21", "title": "User One", }
Wie geht man also mit Nullwerten im Anfragetext um?
Ich möchte nur den Titel dieses Falls ändern
Normalerweise werden solche Teilaktualisierungen mit einer Struktur wie dieser gehandhabt:
type userupdaterequest struct { id primitive.objectid `json:"id,omitempty"` name *string `json:"name,omitempty"` location *string `json:"location,omitempty"` title *string `json:"title,omitempty"` }
Achten Sie auf die Hinweise. Auf diese Weise können API-Aufrufer Werte ungleich Null für die Felder senden, die sie aktualisieren möchten. Es kann auch eine leere Zeichenfolge verwendet werden, um den Feldwert auf Null zu setzen.
Dann müssen Sie auf der Datenbankseite eine Update-Anweisung erstellen:
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}
Dann verwenden Sie update
, um den Datenbankeintrag zu aktualisieren.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Nullwerten in Golang um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!