ホームページ > バックエンド開発 > Golang > Go で io.Reader を文字列に効率的に変換するにはどうすればよいですか?

Go で io.Reader を文字列に効率的に変換するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-29 13:46:12
オリジナル
211 人が閲覧しました

How Can I Efficiently Convert an io.Reader to a String in Go?

io.Reader を文字列に効率的に変換する

問題:

io.ReadCloser を検討してくださいhttp.Response から取得されたオブジェクト。ストリーム全体を文字列に効率的に変換するにはどうすればよいですか?

解決策:

Strings.Builder の使用 (Go 1.10 以降の場合):

これは Go 1.10 および Go 1.10 で推奨され、最も効率的な方法です。上:

import "strings"

func ioReaderToString(r io.ReadCloser) (string, error) {
    buf := new(strings.Builder)
    if _, err := io.Copy(buf, r); err != nil {
        return "", err
    }

    return buf.String(), nil
}
ログイン後にコピー

従来のメソッド (Go

[注: このソリューションは古いため、推奨されません。 Strings.Builder.]

  1. ストリームをbytes.Buffer:
import "bytes"

buf := new(bytes.Buffer)
if _, err := buf.ReadFrom(r); err != nil {
    return "", err
}
ログイン後にコピー
ログイン後にコピー
  1. バッファを文字列に変換します (ここでは非効率なコピー操作が発生します):
s := buf.String()
ログイン後にコピー

安全でない方法 (高度な方法とRisky):

[細心の注意を払って使用してください]

  1. ストリームをバイト単位で読み取ります。バッファ:
import "bytes"

buf := new(bytes.Buffer)
if _, err := buf.ReadFrom(r); err != nil {
    return "", err
}
ログイン後にコピー
ログイン後にコピー
  1. バッファをバイトに変換しますスライス:
b := buf.Bytes()
ログイン後にコピー
  1. 安全ではありません バイトスライスを文字列に変換します:
import "unsafe"

s := *(*string)(unsafe.Pointer(&b))
ログイン後にコピー

安全でないという警告メソッド:

  • すべてのコンパイラまたはアーキテクチャで動作するとは限りません。
  • 結果の文字列は変更可能であり、予期しない動作を引き起こす可能性があります。

推奨事項:

Strings.Builder を使い続けるこの方法は効率的で安全であり、安全でない方法の落とし穴を回避できるためです。

以上がGo で io.Reader を文字列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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