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

Bagaimana untuk Memulakan Peta dengan betul dalam Go Structs?

DDD
DDDasal
2024-12-09 22:12:28901semak imbas

How to Properly Initialize Maps within Go Structs?

Memulakan Peta dalam Go Structs

Memulakan peta dalam struct boleh menjadi tugas yang mengelirukan. Artikel ini meneroka pelbagai pendekatan untuk menangani isu ini.

Masalah: Ralat Masa Jalan

Apabila cuba untuk memulakan peta dalam struct, menjalankan kod berikut boleh menyebabkan masa jalan ralat:

package main

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)
  g.connections[v2] = append(g.connections[v2], v1)
}

Ralat ini berlaku kerana peta sambungan adalah sifar apabila cuba mengaksesnya nilai.

Penyelesaian: Pembina

Satu penyelesaian yang disyorkan ialah mencipta fungsi pembina, seperti yang ditunjukkan di bawah:

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

Fungsi ini mengembalikan a tika Graf baharu dengan peta sambungan yang dimulakan.

Penyelesaian: add_connection Kaedah

Pilihan lain ialah melaksanakan kaedah add_connection yang memulakan peta jika kosong:

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

Kaedah ini menyemak sama ada peta adalah sifar dan memulakannya jika perlu sebelum menambah sambungan .

Contoh daripada Perpustakaan Standard

Standard perpustakaan menyediakan contoh memulakan struct dengan kepingan menggunakan pembina dalam pakej imej/jpeg:

type Alpha struct {
    Pix []uint8
    Stride int
    Rect Rectangle
}

func NewAlpha(r Rectangle) *Alpha {
    w, h := r.Dx(), r.Dy()
    pix := make([]uint8, 1*w*h)
    return &Alpha{pix, 1 * w, r}
}

Secara keseluruhan, pilihan kaedah pemulaan bergantung pada kes penggunaan tertentu. Pembina menawarkan cara yang mudah untuk memastikan permulaan yang betul, manakala kaedah membolehkan lebih fleksibiliti dalam mengendalikan kes luar biasa.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Peta dengan betul dalam Go Structs?. 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