首頁 >後端開發 >Golang >如何為帶有指針的結構定制 Go 的列印輸出?

如何為帶有指針的結構定制 Go 的列印輸出?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-12 16:02:12854瀏覽

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

自訂帶有指標的結構體的列印輸出

在Go 中列印帶有指針的結構體時,使用預設的%v 格式說明符可能無法提供想要的結果。這是因為它列印指標位址而不是引用的結構體的內容。

要解決這個問題,有兩種主要方法:為結構體類型定義自訂 String 方法或手動格式化輸出。

定義自訂字串方法

首選方法是為所涉及的結構實作 Stringer 介面類型。這可以透過向結構添加 String() 字串方法來完成。傳遞給 printf 函數的格式字串將會呼叫此方法。

例如:

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

手動格式化

在沒有String 方法,您可以使用各個結構成員的格式說明符手動格式化輸出。

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

以上是如何為帶有指針的結構定制 Go 的列印輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn