Bei der Golang-Programmierung ist das Problem, dass ein boolescher Wert im PATCH nicht erkannt wird, ein häufiger Fehler. Dieser Fehler kann dazu führen, dass das Programm nicht ordnungsgemäß funktioniert oder unerwartete Ergebnisse liefert. Der PHP-Editor Baicao stellt in diesem Artikel die Ursachen und Lösungen für dieses Problem vor, um den Lesern zu helfen, dieses Problem schnell zu lösen. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, bietet Ihnen dieser Artikel nützliche Anleitungen und Ratschläge, um Ihren Golang-Code robuster und zuverlässiger zu machen.
Ich versuche, einen Antrag zu erstellen, der angibt, ob der Kunde aktiv ist oder nicht. Wenn ich den booleschen Wert „clientactive“ manuell auf „false“ setze, kann ich ihn erfolgreich in „true“ konvertieren. Wenn es jedoch „true“ ist, wird es nicht auf „false“ gesetzt. Ich verwende Gofiber und Gorm
model/client.go
type client struct { gorm.model slug string `json:"slug" gorm:"unique"` clientname string `json:"client_name"` address string `json:"address,omitempty"` address2 string `json:"address_2,omitempty" gorm:"null"` phone string `json:"phone" gorm:"null"` primaryemail string `json:"primary_email" gorm:"null"` secondaryemail string `json:"secondary_email" gorm:"null"` clientactive bool `json:"client_active" gorm:"default:true"` contacts []contact devices []device }
handler/clienthandler.go
func ClientUpdate(c \*fiber.Ctx) error { slug := c.Params("slug") var data models.Client err := c.BodyParser(&data) if err != nil { return err } // todo: the ClientActive variable will set as true, but never false client := &models.Client{ ClientName: data.ClientName, Address: data.Address, Address2: data.Address2, Phone: data.Phone, PrimaryEmail: data.PrimaryEmail, SecondaryEmail: data.SecondaryEmail, ClientActive: data.ClientActive, } err = database.DB.Model(&data).Where("slug = ?", slug).Updates(&client).Error if err != nil { return err } return c.JSON(client) }
Alle anderen Zeilen werden ohne Probleme aktualisiert. Das einzige Problem ist der clientaktive Boolesche Wert.
Der vollständige Code ist unter https://github.com/simpleittools/assetapi verfügbar
Ich habe bestätigt, dass die Daten als boolescher Wert gesendet werden. Ich habe fmt.prtintln(client) sowohl vor als auch nach der Datenbankeingabe ausgeführt und es wird korrekt „false“ angezeigt.
Ich habe während dieses Vorgangs keine Fehlermeldungen erhalten.
Dokumentation zu Gorm-Standardeinstellungen sagt:
Bei Feldern mit definierten Standardwerten wird jeder Nullwert (z. B. 0, '', false) nicht in der Datenbank gespeichert. Möglicherweise müssen Sie Zeigertypen oder Scanner/Wertgeber verwenden, um dies zu vermeiden
Behoben durch Änderung des Feldtyps in *bool
:
type Client struct { ⋮ ClientActive *bool `json:"client_active" gorm:"default:true"` ⋮ }
Das obige ist der detaillierte Inhalt vonGolang-Boolescher Wert wurde im PATCH nicht erkannt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!