In Golang, wenn eine Variable deklariert ist, wird sie wie in der Spezifikation beschrieben mit Null initialisiert.
Aber es ist eine gute Programmierpraxis, diese Eigenschaft zu verwenden und Ihre Variable nicht explizit zu initialisieren, wenn sie mit dem Standardwert initialisiert werden muss.
zum Beispiel im folgenden Beispiel
%Vor%Das Programm basiert auf dem Standardwert von boolean als false.
Wie alle sagen, ist die Spezifikation hier klar: Der gesamte Speicher ist initialisiert (zeroed). Sie sollten dies als Standard-Pakete nutzen. Insbesondere erlaubt es Ihnen, sich auf "Standardkonstruktoren" für Ihre eigenen Typen zu verlassen und oft New() *T
Art von Funktionen zugunsten von &T{}
zu überspringen.
Viele Arten in Standardpaketen nutzen dies, einige Beispiele:
Ein Client ist ein HTTP-Client. Sein Nullwert (DefaultClient) ist ein verwendbarer Client, der DefaultTransport verwendet.
Und dann finden Sie var DefaultClient = &Client{}
im Paket deklariert.
Ein Server definiert Parameter für die Ausführung eines HTTP-Servers. Der Nullwert für Server ist eine gültige Konfiguration.
Ein Puffer ist ein Puffer variabler Größe von Bytes mit Lese- und Schreibmethoden. Der Nullwert für Buffer ist ein gebrauchsfertiger leerer Puffer.
Das ist großartig, denn du kannst einfach var buf bytes.Buffer
machen und anfangen es zu benutzen. Als eine Folge davon werden Sie auch häufig boolesche Member-Variablen sehen, die in einer "negierten" Form verwendet werden - zum Beispiel InsecureSkipVerify
in tls.Config
heißt nicht Verify
, weil das Standardverhalten dann keine Zertifikate validiert (denke ich, dass der false
- oder Null - Wert für die gewünschten Standardwerte verwendet werden soll).
Beantworte schließlich deine Frage:
Aber ist es eine gute Programmierpraxis, diese Eigenschaft zu verwenden und Ihre Variable nicht explizit zu initialisieren, wenn sie mit dem Standardwert initialisiert werden muss?
Ja, ist es.
Initialisieren Sie Variablen nur dann auf ihre Nullwerte, wenn Sie die Kurzdeklarationssyntax verwenden möchten.
%Vor%Andernfalls ist das explizite Initialisieren nur Rauschen. Sie könnten denken, dass etwas mit nicht initialisierten Variablen nicht stimmt ... und Sie haben Recht. Glücklicherweise gibt es so etwas nicht. Nullwerte sind Teil der Spezifikation und sie werden sich nicht plötzlich ändern.
Wenn eine Variable deklariert wird, enthält sie automatisch den Standardwert zero
oder null
für ihren Typ: 0
für int
, 0.0
für float
, false
für bool
, leer Zeichenfolge für string
, nil
für Zeiger, zero-ed-Struktur usw.
Der gesamte Speicher in Go wird initialisiert! .
Zum Beispiel: var arr [5]int
im Speicher kann wie folgt visualisiert werden:
+---+---+---+---+
| | | | |
+---+---+---+---+
0 1 2 3
Bei der Deklaration eines Arrays wird jedes Element automatisch mit dem Standard-Nullwert des Typs initialisiert, hier sind alle Elemente standardmäßig auf 0 gesetzt.
Vorzugsweise ist es also besser, ohne Standardwert zu initialisieren, als in den Situationen, in denen Sie explizit eine Variable mit einem Standardwert deklarieren möchten.
Tags und Links go default default-value