Heim > Backend-Entwicklung > Golang > Wie können Konstrukteure die Initialisierung von Go-Strukturen vereinfachen und Nullzeiger-Paniken vermeiden?

Wie können Konstrukteure die Initialisierung von Go-Strukturen vereinfachen und Nullzeiger-Paniken vermeiden?

Patricia Arquette
Freigeben: 2024-12-08 11:02:11
Original
463 Leute haben es durchsucht

How Can Constructors Simplify Go Struct Initialization and Avoid Nil Pointer Panics?

Konstruktor zum Initialisieren von Go-Strukturmitgliedern

Entwickler, die neu bei Go sind, stoßen häufig auf Initialisierungsherausforderungen mit Strukturen. Bedenken Sie Folgendes:

import "sync"

type SyncMap struct {
        lock *sync.RWMutex
        hm map[string]string
}
Nach dem Login kopieren

Das Instanziieren dieser Struktur mit sm := new(SyncMap) führt leider zu einer Panik aufgrund von Nullzeigern.

Überwindung von Nullzeigern mit einer Hilfsfunktion

Um die Panik zu vermeiden, besteht ein alternativer Ansatz darin, eine separate Funktion für zu verwenden Initialisierung:

func (m *SyncMap) Init() {
        m.hm = make(map[string]string)
        m.lock = new(sync.RWMutex)
}
Nach dem Login kopieren

Nach der Instanziierung der Struktur muss man dann Init manuell aufrufen. Dadurch wird Boilerplate-Code eingeführt.

Einführung von Konstruktoren zur Vereinfachung der Initialisierung

Eine elegantere Lösung ist die Verwendung einer Konstruktorfunktion. Betrachten Sie dieses Beispiel:

func NewSyncMap() *SyncMap {
    return &SyncMap{hm: make(map[string]string)}
}
Nach dem Login kopieren

Diese Funktion initialisiert die erforderlichen Strukturmitglieder und gibt einen Zeiger auf die initialisierte Struktur zurück. Die Verwendung ist unkompliziert:

sm := NewSyncMap()
sm.Put("Test", "Test")
Nach dem Login kopieren

Erweiterte Konstruktoren für komplexe Strukturen

Für Strukturen mit mehr Mitgliedern können Konstruktoren erweitert werden, um zusätzliche Initialisierungsaufgaben zu bewältigen, wie z. B. das Starten von Goroutinen oder Finalizer registrieren:

func NewSyncMap() *SyncMap {
    sm := SyncMap{
        hm: make(map[string]string),
        foo: "Bar",
    }

    runtime.SetFinalizer(sm, (*SyncMap).stop)

    go sm.backend()

    return &sm
}
Nach dem Login kopieren

Durch die Nutzung von Konstruktoren können Go-Entwickler die Strukturinitialisierung vereinfachen und eliminieren Boilerplate-Code und verbessern die Wartbarkeit und Lesbarkeit ihrer Codebasis.

Das obige ist der detaillierte Inhalt vonWie können Konstrukteure die Initialisierung von Go-Strukturen vereinfachen und Nullzeiger-Paniken vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage