Kaedah Aksesor lwn. Penyahrujukan untuk Penyahpepijatan
Dalam coretan kod ini, anda sedang mencetak nilai medan struct yang merupakan penunjuk kepada struct yang lain. Output ialah alamat memori bagi struct pointed-to, bukan nilai sebenar.
package main import "fmt" type SomeStruct struct { somePointer *somePointer } type somePointer struct { field string } func main() { fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}}) }
Untuk tujuan penyahpepijatan, adalah lebih baik untuk mencetak nilai sebenar medan. Terdapat dua cara untuk mencapai ini: menggunakan kaedah pengakses atau membatalkan rujukan penuding.
Kaedah Aksesor
Anda boleh mencipta kaedah pengambil untuk setiap medan penunjuk untuk mendapatkan nilai sebenar . Contohnya:
func (s SomeStruct) GetFieldValue() string { if s.somePointer == nil { return "" } return s.somePointer.field }
Kemudian, dalam kod anda, anda boleh memanggil kaedah pengambil untuk mencetak nilai:
fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}}.GetFieldValue())
Pendekatan ini membolehkan anda mengawal pemformatan output dan menyediakan cara yang mudah untuk mengakses nilai medan tanpa memerlukan penyahrujukan.
Penyahrujukan
Jika anda memilih untuk menyahrujuk penuding secara langsung, anda boleh menggunakan sintaks berikut:
fmt.Println(*SomeStruct{&somePointer{"I want to see what is in here"}}.somePointer)
Walau bagaimanapun, pendekatan ini memerlukan berhati-hati kerana penyahrujukan penunjuk nol boleh menyebabkan panik masa jalan. Anda disyorkan untuk menggunakan kaedah pengambil untuk keselamatan melainkan anda pasti penunjuk itu bukan sifar.
Atas ialah kandungan terperinci Kaedah Pengakses lwn. Penyahrujukan: Mana Yang Lebih Baik untuk Medan Penunjuk Penyahpepijatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!