Go 中的默认值和区分未初始化字段
在 Go 中,原始类型具有默认值。例如,整数 (int) 初始化为 0。但是,在使用结构时,区分 0 值和未初始化的字段可能具有挑战性。
例如,请考虑以下代码:
package main import "log" type test struct { testIntOne int testIntTwo int } func main() { s := test{testIntOne: 0} log.Println(s) }
在此代码中,testIntOne 和 testIntTwo 都为零。但是,testIntOne 已显式设置为 0,而 testIntTwo 已按默认值初始化。这种歧义可能会导致在确定哪些字段已显式设置时出现混乱。
是否可以区分这两种情况?
不,Go 不会跟踪是否某个字段已设置或未设置。因此,不可能知道零值是初始化的结果还是故意赋值的结果。
解决方法
type test struct { testIntOne *int testIntTwo *int }
type test struct { testIntOne int testIntTwo bool // Tracks if testIntTwo has been set } func (t *test) SetTestIntTwo(val int) { t.testIntTwo = val t.isSetTestIntTwo = true } func main() { s := test{} s.SetTestIntTwo(0) fmt.Println(s.isSetTestIntTwo) // Output: true }
以上是如何区分 Go 结构中的默认值和显式设置零值?的详细内容。更多信息请关注PHP中文网其他相关文章!