Go 中的預設結構體值
在 Go 中,諸如 int 之類的基本型別都有預設值。對於 int,此預設值為 0。但是,很難區分手動設定的值 0 和預設值。
考慮以下結構:
type test struct { testIntOne int testIntTwo int }
如果我們建立一個結構體,其中一個欄位設定為0,我們無法判斷另一個欄位是否已設定或仍具有預設值value:
package main import "log" func main() { s := test{testIntOne: 0} log.Println(s) }
解
使用指標
使用指標type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} log.Println(s.testIntOne != nil) // Output: true log.Println(s.testIntTwo != nil) // Output: false }
一種解決方案是為欄位使用指標。指標的零值為nil,因此我們可以檢查該欄位是否已設定:
使用方法type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func main() { s := test{} s.SetOne(0) log.Println(s.oneSet) // Output: true log.Println(s.twoSet) // Output: false }另一個解是建立一個方法設定該字段並追蹤它是否已被設定。該欄位本身應該不匯出以防止直接存取:
以上是如何區分 Go 結構中的預設值和明確設定零值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!