首頁 >後端開發 >Golang >為什麼在 Go 中列印「bytes.Buffer」有時會顯示字串內容,有時會顯示其內部表示?

為什麼在 Go 中列印「bytes.Buffer」有時會顯示字串內容,有時會顯示其內部表示?

DDD
DDD原創
2024-12-13 10:28:26168瀏覽

Why does printing a `bytes.Buffer` in Go sometimes show the string content and sometimes show its internal representation?

在Go 中列印bytes.Buffer 時的不同行為

使用bytes.Buffer 類型時,使用者在列印物件時可能會遇到不同的行為那種類型的。以下程式碼:

buf := new(bytes.Buffer)
buf.WriteString("Hello world")
fmt.Println(buf)

列印“Hello World”,而此程式碼:

var buf bytes.Buffer
buf.WriteString("Hello world")
fmt.Println(buf)

列印以下內容:

{[72 101 108 108 111 32 119 111 114 108 100] 0 [72 101 108 108 111 32 119 111 114 108 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 0}

出現這種明顯的差異是因為bytes.Buffer 類型存在String() 方法。當列印 bytes.Buffer 類型的值時,會呼叫 String() 方法來產生該值的字串表示形式。然而,當列印 bytes.Buffer 類型的值時,沒有這樣的方法可用,並且使用結構體的預設格式,這會導致上面看到的表示形式。

不同的行為進一步由以下:

type MyBuffer bytes.Buffer

func (b *MyBuffer) String() string {
    return "MyBuffer with " + b.String()
}

var b MyBuffer
b.WriteString("Hello world")
fmt.Println(b)

在這種情況下,當列印MyBuffer 值時,會呼叫自訂String() 方法,並將「MyBuffer with .. .」前綴加入到輸出中,示範了以下效果實作String() 方法。

在 Go 中使用 bytes.Buffer 類型時,理解此行為至關重要,因為它會影響輸出的格式,如果處理不當,可能會導致意外結果。

以上是為什麼在 Go 中列印「bytes.Buffer」有時會顯示字串內容,有時會顯示其內部表示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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