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.
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.
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!