默认结构体值
在 Go 中,默认值被分配给在结构体声明期间未初始化的结构体字段。对于像 int 这样的基本类型,此默认值为 0。但是,确定此值是否已显式设置还是默认值可能会出现问题。
有区别吗?
不幸的是,Go 不跟踪字段是否已设置。因此,无法区分已初始化为 0 的字段和根本未设置的字段。
解决方法
1.使用指针:
通过使用指针,您可以利用它们的 nil 零值。如果指针为nil,则表示尚未设置。
type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} fmt.Println("testIntOne set:", s.testIntOne != nil) fmt.Println("testIntTwo set:", s.testIntTwo != nil) }
2.使用方法:
您还可以定义一个方法来设置字段并跟踪它是否已设置。
type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func (t *test) SetTwo(i int) { t.testIntTwo, t.twoSet = i, true } func main() { s := test{} s.SetOne(0) fmt.Println("testIntOne set:", s.oneSet) fmt.Println("testIntTwo set:", s.twoSet) }
以上是如何区分 Go 结构中的默认值和显式设置零值?的详细内容。更多信息请关注PHP中文网其他相关文章!