Go で io.Reader を String に変換する: コピーの回避
Go では、io.ReadCloser オブジェクトを文字列に変換するタスク非効率的なフル充電が必要になる場合がありますcopy.
非効率な方法:
従来の変換では次のアプローチが使用されます:
buf := new(bytes.Buffer) buf.ReadFrom(yourReader) s := buf.String() // Performs a complete byte array copy
このコピーは、潜在的な文字列の変更を防ぎます。ただし、効率上の理由から回避することもできます。
安全でない方法を使用した効率的な方法 (注意を推奨):
注意: この手法は実装に依存しています。ニュアンスが異なるため、すべてのコンパイラまたはアーキテクチャで機能するとは限りません。
buf := new(bytes.Buffer) buf.ReadFrom(yourReader) b := buf.Bytes() s := *(*string)(unsafe.Pointer(&b))
このコードは直接バイト配列を文字列としてキャストします。
考慮事項:
推奨事項:
ほとんどのシナリオでは、公式のフルコピーを使用したメソッド。これにより、型の安全性が確保され、潜在的な文字列の突然変異から保護されます。文字列サイズが重大な問題を引き起こす場合にのみ、安全でないメソッドを慎重に検討する必要があります。
以上が不必要なコピーを使わずに、Go で io.Reader を文字列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。