Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencetak Nilai Penunjuk Bersarang Struct di Golang Tanpa Alamat Penunjuk?

Bagaimana untuk Mencetak Nilai Penunjuk Bersarang Struct di Golang Tanpa Alamat Penunjuk?

DDD
DDDasal
2024-12-07 17:04:11363semak imbas

How to Print a Struct's Nested Pointer Value in Golang Without the Pointer Address?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn