Go で「bytes.Buffer」を出力すると、それがポインタか値かによって異なる結果が生成されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-19 15:53:02
オリジナル
660 人が閲覧しました

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) では、バッファへのポインタを取得します。値の 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 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}.

この違いは、Go が String() メソッドをチェックするために発生します。値を印刷するとき。存在する場合、メソッドが呼び出され、値の表現が取得されます。 *bytes.Buffer などのポインター値の場合は String() メソッドを使用できますが、bytes.Buffer のような通常の値の場合は使用できません。

ポインターとは対照的に、通常の値のデフォルト形式は異なります。印刷時: {field0 field1 ...}、フィールドを表示します。これは、バイトを印刷するときに観察されるさまざまな出力について説明しています。バッファ値は、ポインタか通常の値かに応じて異なります。

以上がGo で「bytes.Buffer」を出力すると、それがポインタか値かによって異なる結果が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート