Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencetak Nilai Struktur Bersarang di Golang Tanpa Alamat Memori?
Apabila bekerja dengan struct bersarang, ia boleh menjadi mencabar untuk mencetak nilainya tanpa memaparkan alamat memorinya. Mari lihat contoh ini:
package main import "fmt" type A struct { a int32 B *B } type B struct { b int32 } func main() { a := &A{ a: 1, B: &B{ b: 2, }, } fmt.Printf("v ==== %+v \n", a) }
Apabila melaksanakan kod ini, anda akan melihat bahawa output mengandungi alamat memori bagi struct bersarang B:
v ==== &{a:1 B:0xc42000e204}
Untuk mendapatkan semula nilai sebenar daripada B, anda boleh menggunakan salah satu pendekatan ini:
Melaksanakan antara muka Stringer untuk struct bersarang membolehkan anda menentukan cara perwakilan rentetannya akan diformatkan apabila dicetak. Begini cara anda boleh melakukannya:
type A struct { a int32 B *B } type B struct{ b int32 } func (aa *A) String() string { return fmt.Sprintf("A{a:%d, B:%v}", aa.a, aa.B) } func (bb *B) String() string { return fmt.Sprintf("B{b:%d}", bb.b) }
Dengan pelaksanaan ini, anda kini boleh menggunakan penentu format %v untuk mencetak perwakilan rentetan tersuai bagi struct:
fmt.Printf("v ==== %v \n", a) // Output: v ==== A{a:1, B:B{b:2}}
Sebagai alternatif, anda boleh mencetak nilai secara manual tanpa bergantung pada antara muka Stringer. Pendekatan ini memberi anda lebih kawalan ke atas format output:
fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b) // Output: v ==== A{a:1, B:B{b:2}}
Jika anda ingin mengelak daripada mencetak rujukan struktur, anda boleh merujuk nilainya secara eksplisit:
fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B) // Output: v ==== A{a:1, B:&{b:2}}
Walau bagaimanapun, pendekatan ini boleh menjadi rumit apabila menangani masalah yang sangat bersarang structs.
Ringkasnya, anda boleh mencetak nilai struct bersarang tanpa penunjuk dengan melaksanakan antara muka Stringer, mencetak nilai secara manual atau merujuk nilai struct secara langsung. Pilih pendekatan yang paling sesuai dengan keperluan khusus anda.
Atas ialah kandungan terperinci Bagaimana untuk Mencetak Nilai Struktur Bersarang di Golang Tanpa Alamat Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!