首頁 > 後端開發 > Golang > 主體

為什麼在 Go 中列印「bytes.Buffer」會根據它是指標還是值而產生不同的結果?

Mary-Kate Olsen
發布: 2024-11-19 15:53:02
原創
659 人瀏覽過

Why Does Printing a `bytes.Buffer` in Go Produce Different Results Depending on Whether It's a Pointer or a Value?

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

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