首页 >后端开发 >Golang >如何区分 Go 结构中的默认值和显式设置零值?

如何区分 Go 结构中的默认值和显式设置零值?

DDD
DDD原创
2024-12-04 09:36:11644浏览

How Can I Distinguish Between Default and Explicitly Set Zero Values in Go Structs?

默认结构体值

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn