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

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

Mary-Kate Olsen
發布: 2024-12-12 16:02:12
原創
854 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板