2017-04-11 132 views
0

是否可以区分false和未设置的布尔值?检查布尔值是否设置为Go

举例来说,如果我有这个代码

type Test struct { 
    Set bool 
    Unset bool 
} 

test := Test{ Set: false } 

test.Settest.Unset之间,如果这样我怎么能告诉他们分开有什么区别?

+0

只是出于好奇:语言规范的哪一部分或围棋之旅让你觉得有东西在往哪个是“未设置”? – Volker

+2

@Volker:出于好奇:有什么不礼貌的地方?如果读者已经阅读完整的语言规范,不要暗示人们只能在这里提问。这不是SOF的工作原理。 –

回答

3

不,一个布尔有两种可能性: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 

这个成本,这是一个有点丑陋将值设置为文本,你必须更加小心取消引用位(检查无)当您使用的值。

Playground link

+0

谢谢,我担心没有什么区别,但希望我可以在没有太多痛苦的情况下使用指针解决方案。 – hobberwickey

1

bool的零值为false所以它们之间没有差别。

请参阅规格的zero value部分。

你想解决什么问题需要这种检查?