Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencetak Nilai Struktur Bersarang di Golang Tanpa Alamat Memori?

Bagaimana untuk Mencetak Nilai Struktur Bersarang di Golang Tanpa Alamat Memori?

Patricia Arquette
Patricia Arquetteasal
2024-11-28 06:16:14118semak imbas

How to Print Nested Struct Values in Golang Without Memory Addresses?

Cara Mencetak Nilai Struktur Bersarang Tanpa Penunjuk di Golang

Apabila bekerja dengan struct bersarang, ia boleh menjadi mencabar untuk mencetak nilainya tanpa memaparkan alamat memorinya. Mari lihat contoh ini:

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)
}

Apabila melaksanakan kod ini, anda akan melihat bahawa output mengandungi alamat memori bagi struct bersarang B:

v ==== &{a:1 B:0xc42000e204}

Untuk mendapatkan semula nilai sebenar daripada B, anda boleh menggunakan salah satu pendekatan ini:

Laksanakan Stringer Antara Muka

Melaksanakan antara muka Stringer untuk struct bersarang membolehkan anda menentukan cara perwakilan rentetannya akan diformatkan apabila dicetak. Begini cara anda boleh melakukannya:

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)
}

Dengan pelaksanaan ini, anda kini boleh menggunakan penentu format %v untuk mencetak perwakilan rentetan tersuai bagi struct:

fmt.Printf("v ==== %v \n", a)
// Output: v ==== A{a:1, B:B{b:2}}

Nilai Pencetakan Secara manual

Sebagai alternatif, anda boleh mencetak nilai secara manual tanpa bergantung pada antara muka Stringer. Pendekatan ini memberi anda lebih kawalan ke atas format output:

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}}

Merujuk Nilai Struktur

Jika anda ingin mengelak daripada mencetak rujukan struktur, anda boleh merujuk nilainya secara eksplisit:

fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
// Output: v ==== A{a:1, B:&{b:2}}

Walau bagaimanapun, pendekatan ini boleh menjadi rumit apabila menangani masalah yang sangat bersarang structs.

Ringkasnya, anda boleh mencetak nilai struct bersarang tanpa penunjuk dengan melaksanakan antara muka Stringer, mencetak nilai secara manual atau merujuk nilai struct secara langsung. Pilih pendekatan yang paling sesuai dengan keperluan khusus anda.

Atas ialah kandungan terperinci Bagaimana untuk Mencetak Nilai Struktur Bersarang di Golang Tanpa Alamat Memori?. 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