Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyesuaikan Output Cetakan Go untuk Structs dengan Penunjuk?

Bagaimana untuk Menyesuaikan Output Cetakan Go untuk Structs dengan Penunjuk?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-12 16:02:12916semak imbas

How to Customize Go's Print Output for Structs with Pointers?

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!

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