ホームページ バックエンド開発 Golang Go で「bytes.Buffer」を出力すると、ポインターが使用されるか値が使用されるかによって異なる出力が生成されるのはなぜですか?

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

Nov 23, 2024 am 01:34 AM

Why Does Printing a `bytes.Buffer` in Go Produce Different Output Depending on Whether a Pointer or Value is Used?

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」が出力される理由です。

2 番目の例では、

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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

See all articles