Heim > Backend-Entwicklung > Golang > Wie initialisiere ich ein Kartenfeld in einer Go-Struktur ordnungsgemäß?

Wie initialisiere ich ein Kartenfeld in einer Go-Struktur ordnungsgemäß?

Susan Sarandon
Freigeben: 2024-12-02 05:36:10
Original
408 Leute haben es durchsucht

How to Properly Initialize a Map Field in a Go Struct?

Initialisieren eines Strukturfelds vom Typ Map in Go

Beim Arbeiten mit Go-Strukturen, die Map-Felder enthalten, ist es wichtig, die Map vorher zu initialisieren es benutzen. Eine häufige Ursache für Verwirrung entsteht, wenn versucht wird, die Karte während der Strukturinitialisierung zu initialisieren, wie im folgenden Codeausschnitt gezeigt:

type Vertex struct {
   label string
} 

type Graph struct {
  connections map[Vertex][]Vertex
} 

func main() {
  v1 := Vertex{"v1"}
  v2 := Vertex{"v2"}

  g := new(Graph)
  g.connections[v1] = append(g.coonections[v1], v2) // panic: runtime error: assignment to entry in nil map
  g.connections[v2] = append(g.connections[v2], v1)
}
Nach dem Login kopieren

Dieser Code löst einen Laufzeitfehler aus, da g.connections bei der Strukturinstanziierung Null ist, und Der Versuch, einer Null-Karte zuzuordnen, ist verboten.

Es gibt mehrere Lösungsansätze dies:

1. Erstellen Sie eine Konstruktormethode:

Eine Lösung besteht darin, eine Konstruktormethode zu verwenden, die die Verantwortung für die Initialisierung der Karte während der Strukturerstellung übernimmt:

func NewGraph() *Graph {
    g := &Graph{}
    g.connections = make(map[Vertex][]Vertex)
    return g
}
Nach dem Login kopieren

2. Fügen Sie eine Verbindungsmethode hinzu:

Ein anderer Ansatz besteht darin, eine „add_connection“-Methode zu verwenden, die prüft, ob die Karte Null ist, und sie bei Bedarf initialisiert, bevor der gewünschte Vorgang ausgeführt wird:

func (g *Graph) add_connection(v1, v2 Vertex) {
  if g.connections == nil {
    g.connections = make(map[Vertex][]Vertex)
  }
  g.connections[v1] = append(g.connections[v1], v2)
  g.connections[v2] = append(g.connections[v2], v1)
}
Nach dem Login kopieren

3. Verwenden Sie einen Feldwert ungleich Null:

Alternativ können Sie dem Kartenfeld während der Strukturinitialisierung einen Wert ungleich Null zuweisen:

type Graph struct {
  connections map[Vertex][]Vertex = make(map[Vertex][]Vertex)
}
Nach dem Login kopieren

4. Reflexion verwenden:

Für komplexere Fälle kann Reflexion verwendet werden, um zur Laufzeit auf das Kartenfeld zuzugreifen und es zu ändern. Allerdings ist dieser Ansatz im Allgemeinen weniger idiomatisch und sollte mit Vorsicht angewendet werden.

Die Wahl der Methode hängt von den spezifischen Anforderungen und Vorlieben Ihrer Anwendung ab. Konstruktoren und add_connection-Methoden werden häufig verwendet und bieten eine klare und unkomplizierte Möglichkeit, Karten innerhalb von Strukturen zu initialisieren und zu bearbeiten.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein Kartenfeld in einer Go-Struktur ordnungsgemäß?. 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