Go 中打印bytes.Buffer 的不同行為
在Go 中,當使用fmt.Println() bytes.Buffer 時,行為可能會有所不同,具體取決於您是使用指向bytes.Buffer 的指標還是直接使用該值。解釋如下:
在第一個範例中:
buf := new(bytes.Buffer) buf.WriteString("Hello world") fmt.Println(buf)
buf 是一個指向 bytes.Buffer 的指針,這表示它有一個可用的 String() 方法。當您將指標傳遞給 fmt.Println() 時,會自動呼叫 String() 方法,該方法會將 bytes.Buffer 的內容轉換為字串。這就是為什麼您會看到列印“Hello World”。
在第二個範例中:
var buf bytes.Buffer buf.WriteString("Hello world") fmt.Println(buf)
buf 是 bytes.Buffer 類型的值,而不是指標。因此,String() 方法不可用於該值。相反,fmt.Println() 使用預設格式 {field0 field1 ...} 將其列印為常規結構值。這裡的字段是緩衝區中儲存的字節,表示為整數切片。
要始終將bytes.Buffer 的內容列印為字串,無論使用指標還是值,您可以在列印之前明確呼叫String() 方法:
fmt.Println(buf.String())
這將確保兩種情況的行為一致。
以上是為什麼在 Go 中列印「bytes.Buffer」會根據使用的是指標還是值而產生不同的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!