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

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

DDD
发布: 2024-12-04 09:36:11
原创
615 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板