Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencetak Nilai Struktur Bersarang dengan Penunjuk dalam Go?

Bagaimana untuk Mencetak Nilai Struktur Bersarang dengan Penunjuk dalam Go?

Patricia Arquette
Lepaskan: 2024-12-29 21:24:11
asal
213 orang telah melayarinya

How to Print the Values of Nested Structs with Pointers in 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)
}
Salin selepas log masuk

Output bagi kod di atas ialah:

v ==== &{a:1 B:0xc42000e204}
Salin selepas log masuk

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)
}
Salin selepas log masuk

Sekarang, output ialah :

v ==== A{a:1, B:B{b:2}}
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan