Go 中列印位元組緩衝區的不同行為
在Go 中,列印bytes.Buffer 值可以產生不同的輸出,具體取決於它是否是一個指標或常規值。
當使用 new(bytes.Buffer) 建立 bytes.Buffer 時,我們取得指向緩沖區的指標。存取該值的 String() 方法並列印它會輸出緩衝區的內容:Hello World.
但是,使用 var buf bytes.Buffer 會直接建立一個 bytes.Buffer 類型的值。該值沒有 String() 方法,因此會列印其預設格式。這會產生詳細輸出: {[72 101 108 108 111 32 119 111 114 108 100] 0 [72 101 108 108 111 32 119 111 101 108 108 111 32 119 111 114 10 010 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}.
出現這種差異是因為Go 在列印時檢查String() 方法價值觀。如果存在,則呼叫該方法來取得值的表示形式。對於指標值,例如 *bytes.Buffer,可以使用 String() 方法,但對於像 bytes.Buffer 這樣的常規值,則不可用。
與指標相比,常規值具有不同的預設格式列印時:{field0 field1 ...},顯示它們的欄位。這解釋了列印 bytes.Buffer 值時觀察到的不同輸出,具體取決於它們是指標還是常規值。
以上是為什麼在 Go 中列印「bytes.Buffer」會根據它是指標還是值而產生不同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!