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