Maison  >  Article  >  développement back-end  >  Golang booléen non détecté sur PATCH

Golang booléen non détecté sur PATCH

王林
王林avant
2024-02-12 20:00:10976parcourir

Golang 布尔值未在 PATCH 上检测到

Le problème de la valeur booléenne non détectée sur PATCH est une erreur courante dans la programmation Golang. Cette erreur peut empêcher le programme de fonctionner correctement ou produire des résultats inattendus. L'éditeur PHP Baicao présentera les causes et les solutions à ce problème dans cet article pour aider les lecteurs à résoudre rapidement ce problème. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira des orientations et des conseils utiles pour rendre votre code Golang plus robuste et fiable.

Contenu de la question

J'essaie de faire une application qui indique si le client est actif ou non. Si je définis manuellement le booléen clientactive sur false, je peux le convertir avec succès en vrai. Mais si c’est vrai, il ne sera pas défini sur faux. J'utilise gofiber et gorm

modèle/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)

}

Toutes les autres lignes sont mises à jour sans problème. Le seul problème est le booléen clientactive.

Le code complet est disponible sur https://github.com/simpleittools/assetapi

J'ai confirmé que les données sont envoyées sous forme de valeur booléenne. J'ai exécuté fmt.prtintln(client) avant et après l'entrée de la base de données et il affiche correctement false.

Je n'ai reçu aucune erreur au cours de ce processus.

Workaround

documentation sur les valeurs par défaut de Gorm dit :

Pour les champs avec des valeurs par défaut définies, toute valeur nulle (par exemple 0, '', false) ne sera pas enregistrée dans la base de données, vous devrez peut-être utiliser des types de pointeurs ou un scanner/valueur pour éviter cela

Corrigé en changeant le type de champ en *bool : 

type Client struct {
    ⋮
    ClientActive *bool `json:"client_active" gorm:"default:true"`
    ⋮
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer