在Go中检查布尔值是否已设置

8

在Go语言中,能否区分false和未设置的布尔值?

例如,如果我有以下代码:

type Test struct {
    Set bool
    Unset bool
}

test := Test{ Set: false }

test.Settest.Unset之间有什么区别,如果有的话,我该如何区分它们?


只是出于好奇:Go语言规范的哪一部分或Go之旅让你认为Go中有“未设置”的东西? - Volker
16
@Volker:只是出于好奇,你这么粗鲁有什么意义吗?不要暗示人们只有在完全阅读了语言规范之后才能在这里提问。这不是 SOF 的工作方式。 - Jan Groth
4个回答

21

不,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链接


谢谢,我担心没有区别,但希望我能够不费吹灰之力地解决指针问题。 - hobberwickey

3

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

请参考规范中的 零值 部分。

您试图解决什么问题,需要进行这种检查吗?


2

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接