Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memulakan Medan Peta dengan betul dalam Go Struct?

Bagaimana untuk Memulakan Medan Peta dengan betul dalam Go Struct?

Susan Sarandon
Susan Sarandonasal
2024-12-02 05:36:10347semak imbas

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

Memulakan Medan Struktur Jenis Peta dalam Go

Apabila bekerja dengan struct Go yang mengandungi medan peta, adalah penting untuk memulakan peta sebelum menggunakannya. Sumber kekeliruan yang biasa timbul apabila cuba memulakan peta semasa pemulaan struct, seperti yang ditunjukkan dalam coretan kod di bawah:

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)
}

Kod ini mencetuskan ralat masa jalan kerana g.connections adalah sifar pada saat struct, dan percubaan untuk menyerahkan kepada peta sifar adalah dilarang.

Beberapa pendekatan wujud untuk menangani ini:

1. Cipta Kaedah Pembina:

Satu penyelesaian ialah menggunakan kaedah pembina, yang mengambil tanggungjawab untuk memulakan peta semasa penciptaan struct:

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

2. Tambah Kaedah Sambungan:

Pendekatan lain melibatkan penggunaan kaedah "add_connection" yang menyemak sama ada peta adalah sifar dan memulakannya jika perlu sebelum melakukan operasi yang diingini:

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)
}

3. Gunakan Nilai Medan Bukan Nihil:

Sebagai alternatif, anda boleh menetapkan nilai bukan nol kepada medan peta semasa pemulaan struct:

type Graph struct {
  connections map[Vertex][]Vertex = make(map[Vertex][]Vertex)
}

4. Gunakan Refleksi:

Untuk kes yang lebih kompleks, refleksi boleh digunakan untuk mengakses dan mengubah suai medan peta pada masa jalan. Walau bagaimanapun, pendekatan ini secara amnya kurang idiomatik dan harus digunakan dengan berhati-hati.

Pilihan kaedah bergantung pada keperluan khusus dan keutamaan aplikasi anda. Kaedah pembina dan add_connection biasanya digunakan, menawarkan cara yang jelas dan mudah untuk memulakan dan beroperasi pada peta dalam struct.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Medan Peta dengan betul dalam Go Struct?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn