Pengujian untuk Nilai Nil dalam Struktur Bersarang
Struktur bersarang dalam Go ialah kejadian biasa, terutamanya apabila berurusan dengan data yang tidak dikawal daripada JSON. Walau bagaimanapun, struktur ini selalunya mempunyai medan "omitomitempty", menghasilkan campuran nilai bukan nol dan nil pada pelbagai peringkat.
Untuk menangani isu ini, terdapat dua pendekatan biasa:
1. Semakan Nil Manual:
Ini melibatkan penyemakan nilai sifar secara eksplisit pada setiap peringkat, menggunakan pernyataan if seperti:
if f2.Bar != nil && f2.Bar.Baz != nil { fmt.Println(f2.Bar.Baz.Baz) }
Kaedah ini mudah tetapi boleh menjadi berulang dan membosankan secara mendalam struktur bersarang.
2. Pengambil untuk Penerima Penunjuk:
Pendekatan yang lebih elegan dan cekap ialah untuk menentukan kaedah pengambil untuk medan yang digunakan sebagai penunjuk dalam struktur. Getter ini menyemak sama ada penerima adalah sifar dan mengembalikan nilai sifar jika ia. Jika tidak, mereka mengembalikan nilai medan.
Sebagai contoh, menggunakan getter untuk struct Bar dan Baz:
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 }
Dengan getter masuk tempat, menyemak nilai nil menjadi dipermudahkan:
fmt.Println(f3.Bar.GetBaz().GetBaz()) // No panic if baz := f2.Bar.GetBaz(); baz != nil { fmt.Println(baz.GetBaz()) }
Kaedah ini menghapuskan keperluan untuk penyataan jika berulang dan memastikan bahawa penunjuk tiada rujukan tidak pernah mengakibatkan panik masa jalan. Ia juga sejajar dengan pendekatan yang digunakan dalam kod Go yang dijana untuk mesej protobuf, menyediakan cara semula jadi dan konsisten untuk mengendalikan nilai sifar dalam struktur kompleks.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Nilai Nil dengan Berkesan dalam Struktur Nested Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!