J'ai des problèmes avec l'écriture d'une bibliothèque golang pour une api. L'aspect json des booléens est à l'origine de problèmes.
Disons que la valeur par défaut d'un booléen est vraie pour un appel api.
Si je fais
SomeValue bool `json:some_value,omitempty`
et je ne définit pas la valeur via la bibliothèque, la valeur sera définie sur true. Si je mets la valeur false dans la bibliothèque, omitempty dit qu'une fausse valeur est une valeur vide, donc la valeur restera vraie pendant l'appel api.
Supprimons l'omitempty et faisons-le ressembler à ceci
SomeValue bool `json:some_value`
Maintenant, j'ai le problème opposé, je peux définir la valeur sur false mais si je ne la définit pas, la valeur sera fausse même si je m'attends à ce qu'elle soit vraie.
Edit: Comment puis-je conserver le comportement de ne pas avoir à définir la valeur sur true tout en étant capable de définir la valeur sur false?
package main
import (
"encoding/json"
"fmt"
)
type SomeStruct struct {
SomeValue *bool `json:"some_value,omitempty"`
}
func main() {
t := new(bool)
f := new(bool)
*t = true
*f = false
s1, _ := json.Marshal(SomeStruct{nil})
s2, _ := json.Marshal(SomeStruct{t})
s3, _ := json.Marshal(SomeStruct{f})
fmt.Println(string(s1))
fmt.Println(string(s2))
fmt.Println(string(s3))
}
Production:
{}
{"some_value":true}
{"some_value":false}