【发布时间】:2019-03-16 14:20:02
【问题描述】:
type Test struct { }
我知道这可能是(Test{}) == test 检查空结构的方法。但是,它似乎不适用于仅包含一个布尔字段的结构。考虑这个例子:
package main
import "fmt"
type Test struct {
Foo bool
}
func main() {
empty := Test{}
test1 := Test{Foo: true}
test2 := Test{Foo: false}
fmt.Println(Test{} == test1) //False yay
fmt.Println(Test{} == test2) //True oh no ...
fmt.Println(Test{} == empty) //True yay
}
基本上,== 认为包含false 字段的结构与空结构相同。
有没有更好的方法来检查 空结构 还是我在这里遗漏了什么?
另外,你可能想知道为什么 struct 中只有一个字段,因为 struct 处于开发阶段,以后可能会有更多字段。
【问题讨论】:
-
empty包含一个字段,您只是没有明确将其设置为任何内容。 -
“基本上,== 认为包含
false字段的结构与空结构相同。” 这是因为在 Go 中它们是相同的。如果您需要区分 零值 和 “未初始化”值,则必须通过向值/字段添加更多信息来解决此语言功能.例如。通过将其设为指针或使用struct类型,如在database/sql中找到的sql.NullXxx类型。
标签: go