我在為 api 編寫 golang 庫時遇到問題。布爾值的 json 方面導致了問題。假設對于 api 調用,布爾值的默認值為 true。如果我做SomeValue bool `json:some_value,omitempty`而且我沒有通過庫設置值,該值將設置為true。如果我在庫中將該值設置為 false,則 omitempty 表示 false 值是一個空值,因此該值將通過 api 調用保持為真。讓我們去掉省略號,讓它看起來像這樣SomeValue bool `json:some_value`現在我遇到了相反的問題,我可以將值設置為 false,但如果我不設置該值,那么即使我希望它為 true,該值也會為 false。編輯:如何保持不必將值設置為 true 同時也能夠將值設置為 false 的行為?
1 回答

忽然笑
TA貢獻1806條經驗 獲得超5個贊
使用指針
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))
}
輸出:
{}
{"some_value":true}
{"some_value":false}
- 1 回答
- 0 關注
- 173 瀏覽
添加回答
舉報
0/150
提交
取消