Menyesuaikan Output Cetakan Struktur dengan Penunjuk
Apabila mencetak struct dengan penunjuk dalam Go, menggunakan penentu format %v lalai mungkin tidak menyediakan hasil yang diingini. Ini kerana ia mencetak alamat penuding dan bukannya kandungan struct yang dirujuk.
Untuk menangani perkara ini, terdapat dua pendekatan utama: tentukan kaedah Rentetan tersuai untuk jenis struct atau format output secara manual.
Mentakrifkan Kaedah Rentetan Tersuai
Kaedah pilihan adalah untuk melaksanakan antara muka Stringer untuk jenis struktur yang terlibat. Ini boleh dilakukan dengan menambah kaedah rentetan String() pada struct. Rentetan format yang dihantar kepada fungsi printf akan memanggil kaedah ini sebaliknya.
Contohnya:
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}} fmt.Printf("v ==== %v \n", a) // Prints "v ==== A{a:1, B:B{b:2}}" }
Pemformatan Manual
Jika tiada kaedah String, anda boleh memformat output secara manual menggunakan penentu format ahli struct individu.
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 ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b) }
Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Output Cetakan Go untuk Structs dengan Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!