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!