Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencetak Nilai Struktur Bersarang dengan Penunjuk dalam Go?
Mencetak Nilai Struktur dengan Penunjuk dalam Go
Dalam Go, adalah perkara biasa untuk menghadapi situasi di mana anda perlu mencetak nilai struct yang mengandungi penunjuk kepada struct lain. Walau bagaimanapun, kelakuan lalai penentu format %v dalam fmt.Printf() memaparkan alamat penuding dan bukannya nilai sebenar.
Pertimbangkan contoh berikut:
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) }
Output bagi kod di atas ialah:
v ==== &{a:1 B:0xc42000e204}
Seperti yang anda lihat, medan B dicetak sebagai alamat memori bagi struct B, bukan nilai sebenar.
Pencetakan Tersuai dengan Antara Muka Stringer
Salah satu cara untuk mencetak kandungan struct bersarang adalah dengan melaksanakan antara muka Stringer untuk kedua-dua jenis A dan B . Antara muka Stringer memerlukan satu kaedah, String(), yang mengembalikan perwakilan rentetan nilai.
Berikut ialah contoh yang dikemas kini dengan antara muka Stringer:
package main import "fmt" 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) } func main() { a := &A{a: 1, B: &B{b: 2}} // using the Stringer interface fmt.Printf("v ==== %v \n", a) // or just print it yourself however you want. fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b) // or just reference the values in the struct that are structs themselves // but this can get really deep fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B) }
Sekarang, output ialah :
v ==== A{a:1, B:B{b:2}}
Pencetakan Manual
Jika anda tidak mahu melaksanakan antara muka Stringer, anda boleh mencetak secara manual perwakilan struktur yang dikehendaki menggunakan pernyataan cetakan. Contohnya, anda boleh mengakses medan struct bersarang dan mencetaknya secara berasingan:
fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
Pendekatan ini memberi anda kawalan sepenuhnya ke atas format output.
Atas ialah kandungan terperinci Bagaimana untuk Mencetak Nilai Struktur Bersarang dengan Penunjuk dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!