Cara Mencetak Nilai Struktur dengan Penunjuk di Golang
Pertimbangkan coretan kod 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: v ==== &{a:1 B:0xc42000e204} }
Di sini, anda ingin mencetak nilai B tanpa perwakilan penudingnya. Untuk mencapai matlamat ini, terdapat beberapa pilihan:
1. Melaksanakan Antara Muka Stringer:
Fungsi fmt.Printf() memanggil kaedah String() jika ia wujud untuk jenis yang dicetak. Laksanakan kaedah String() untuk kedua-dua struktur A dan B:
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, outputnya ialah:
v ==== A{a:1, B:B{b:2}}
2. Menyesuaikan Format Cetakan:
Anda boleh memformat terus rentetan output untuk memasukkan hanya medan yang dikehendaki:
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}}
3. Merujuk Nilai dalam Struktur:
Memandangkan B ialah medan dalam A, anda boleh merujuk terus nilainya:
fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
Output:
v ==== A{a:1, B:&{b:2}}
Atas ialah kandungan terperinci Bagaimana untuk Mencetak Nilai Penunjuk Bersarang Struct di Golang Tanpa Alamat Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!