Heim > Backend-Entwicklung > Golang > Golang-Boolescher Wert wurde im PATCH nicht erkannt

Golang-Boolescher Wert wurde im PATCH nicht erkannt

王林
Freigeben: 2024-02-12 20:00:10
nach vorne
1050 Leute haben es durchsucht

Golang 布尔值未在 PATCH 上检测到

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.

Frageninhalt

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
}
Nach dem Login kopieren

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)

}
Nach dem Login kopieren

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.

Workaround

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"`
    ⋮
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage