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

Golang-Boolescher Wert wurde im PATCH nicht erkannt

王林
王林nach vorne
2024-02-12 20:00:10938Durchsuche

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
}

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.

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"`
    ⋮
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen