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

Bagaimana untuk Memulakan Peta dengan betul dalam Go Structs?

DDD
Lepaskan: 2024-12-09 22:12:28
asal
899 orang telah melayarinya

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)
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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}
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan