是否可以在go中区分false
和未设置的布尔值?
例如,如果我有这个代码
type Test struct {
Set bool
Unset bool
}
test := Test{ Set: false }
test.Set
和test.Unset
之间是否有任何区别?如果是这样,我怎么能区分它们?
答案 0 :(得分:4)
不,bool有两种可能:true
或false
。未初始化的bool的默认值为false
。如果您想要第三个州,则可以改为使用*bool
,默认值为nil
。
type Test struct {
Set *bool
Unset *bool
}
f := false
test := Test{ Set: &f }
fmt.Println(*test.Set) // false
fmt.Println(test.Unset) // nil
这样做的代价是将值设置为文字有点麻烦,并且在使用这些值时必须更加小心地取消引用(并检查nil)。
答案 1 :(得分:1)
答案 2 :(得分:0)
您可能会想到使用3状态布尔值:https://github.com/grignaak/tribool
答案 3 :(得分:0)
是的。您必须使用*bool
而不是原始的bool