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中文網其他相關文章!