Standardwerte und Unterscheidung nicht initialisierter Felder in Go
In Go haben primitive Typen Standardwerte. Zum Beispiel werden Ganzzahlen (int) auf 0 initialisiert. Wenn Sie jedoch mit Strukturen arbeiten, kann die Unterscheidung zwischen einem 0 -Wert und einem nicht initialisierten Feld herausfordernd sein. "Protokoll" importieren " Tippen Sie die Teststruktur { TESTINTONE INT testinttwo int } func main () { S: = Test {testintone: 0} log.println (s) }
In diesem Code sind sowohl TestIntone als auch testintTwo Null. TestIntone wurde jedoch explizit auf 0 gesetzt, während TestIntTwo vom Standardwert initialisiert wurde. Diese Mehrdeutigkeit kann zu Verwirrung führen, um festzustellen, welche Felder explizit eingestellt wurden.
package main import "log" type test struct { testIntOne int testIntTwo int } func main() { s := test{testIntOne: 0} log.Println(s) }Ist es möglich, zwischen diesen beiden Fällen zu unterscheiden? Daher ist es unmöglich zu wissen, ob ein Nullwert das Ergebnis der Initialisierung oder eine absichtliche Zuweisung ist.
Workarounds
verwenden Zeiger. nil.
type test struct { testintone *int testinttwo *int }
type test struct { testIntOne *int testIntTwo *int }
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3