Menguji Nilai Nil dalam Struktur Bersarang
Apabila bekerja dengan struct bersarang dalam Go, adalah perkara biasa untuk menghadapi senario di mana medan tertentu mungkin kosong disebabkan oleh "omitemptyempty" unmarshalling. Ini memerlukan kaedah untuk mengakses medan bersarang dalam dengan pasti tanpa mencetuskan panik masa jalan.
Ujian Nil Generik
Pendekatan biasa ialah menyemak nilai nil secara manual menggunakan pernyataan if. Walau bagaimanapun, ini boleh menjadi membosankan, terutamanya untuk struktur bersarang dalam. Penyelesaian yang lebih generik ialah melaksanakan getter dengan penerima penuding dalam struct yang mungkin mengandungi medan nil.
Fungsi Getter
Sebagai contoh, mempertimbangkan Foo, Bar dan Baz struct:
type Bar struct { Bar string Baz *Baz } type Baz struct { Baz string }
Kita boleh mentakrifkan getter sebagai berikut:
func (b *Bar) GetBaz() *Baz { if b == nil { return nil } return b.Baz } func (b *Baz) GetBaz() string { if b == nil { return "" } return b.Baz }
Menggunakan Getters
Dengan getter ini, kami boleh mengakses medan bersarang tanpa ralat masa jalan, walaupun sesetengah medan adalah sifar:
fmt.Println(f3.Bar.GetBaz().GetBaz()) // No panic fmt.Println(f2.Bar.GetBaz().GetBaz()) // No panic fmt.Println(f1.Bar.GetBaz().GetBaz()) // No panic if baz := f2.Bar.GetBaz(); baz != nil { fmt.Println(baz.GetBaz()) } else { fmt.Println("something nil") }
Pendekatan ini memastikan keselamatan jenis dan menghapuskan panik masa jalan yang dikaitkan dengan mengakses penunjuk nil. Ia juga menyediakan cara yang lebih ringkas dan elegan untuk mengendalikan nilai nil bersarang.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Nilai Nil Bersarang dengan Selamat dalam Go Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!