I'm having issues with writing a golang library for an api. The json aspect of booleans is causing issues.
Let's say the default value of a boolean is true for an api call.
If I do
SomeValue bool `json:some_value,omitempty`
and I don't set the value through the library, the value will be set to true. If I set the value to false in the library, omitempty says that a false value is an empty value so the value will stay true through the api call.
Let's take out the omitempty and have it look like this
SomeValue bool `json:some_value`
Now I have the opposite issue, I can set the value to false but if I don't set the value then the value will be false even though I expect it to be true.
Edit: How do I maintain the behavior of not having to set the value to true while also being able to set the value to false?
Use pointers
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))
}
Output:
{}
{"some_value":true}
{"some_value":false}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With