Ist es erforderlich, der Variablen in Golang einen Standardwert zuzuweisen?

8

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.

    
Mayank Patel 23.07.2015, 08:21
quelle

3 Antworten

5

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.

bytes.Buffer

  

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.

    
tomasz 23.07.2015, 13:19
quelle
6

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.

    
Staven 23.07.2015 09:29
quelle
2

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.

    
Simo Endre 23.07.2015 11:36
quelle

Tags und Links