检查Go中是否设置了布尔值

时间:2017-04-11 16:14:07

标签: go boolean

是否可以在go中区分false和未设置的布尔值?

例如,如果我有这个代码

type Test struct {
    Set bool
    Unset bool
}

test := Test{ Set: false }

test.Settest.Unset之间是否有任何区别?如果是这样,我怎么能区分它们?

4 个答案:

答案 0 :(得分:4)

不,bool有两种可能:truefalse。未初始化的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)。

Playground link

答案 1 :(得分:1)

bool的值为false,因此它们之间没有区别。

请参阅规范的zero value部分。

您想要解决哪些问题需要进行此类检查?

答案 2 :(得分:0)

您可能会想到使用3状态布尔值:https://github.com/grignaak/tribool

答案 3 :(得分:0)

是的。您必须使用*bool而不是原始的bool