GoでCR/LF区切り文字を使用して複数行の応答を読み取る方法?

Susan Sarandon
リリース: 2024-10-28 16:48:02
オリジナル
572 人が閲覧しました

How to Read Multiline Responses with CR/LF Delimiter in Go?

Go で CR/LF 区切り文字を使用した複数行の応答を読み取る

Go で Beanstalkd クライアントを実装する場合、両方の改行文字で区切られた複数行の応答を読み取る必要があります(n) と復帰文字 (r)。デフォルト関数 bufio.ReadLine は、n による区切りのみをサポートします。

CRLF までの読み取り

CRLF 区切り文字まで読み取るには、カスタム SplitFunc 関数で bufio.Scanner を使用できます。

<code class="go">import (
    "bufio"
    "fmt"
    "io"

    "bytes"
)

func ScanCRLF(data []byte, atEOF bool) (advance int, token []byte, err error) {
    if atEOF && len(data) == 0 {
        return 0, nil, nil
    }
    if i := bytes.Index(data, []byte{'\r', '\n'}); i >= 0 {
        return i + 2, dropCR(data[0:i]), nil
    }
    if atEOF {
        return len(data), dropCR(data), nil
    }
    return 0, nil, nil
}</code>
ログイン後にコピー

この場合、dropCR はトークンから末尾の「r」文字を削除します。

その後、ScanCRLF 関数で bufio.Scanner を使用してデータを読み取ることができます。

<code class="go">scanner := bufio.NewScanner(this.reader)
scanner.Split(ScanCRLF)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}</code>
ログイン後にコピー

また、bufio.NewReaderSize を使用して特定の長さを読み取ることもできます。

<code class="go">var nr_of_bytes int
nr_of_bytes, _ = strconv.Atoi(res)
buf := make([]byte, nr_of_bytes)
_, _ = io.ReadAtLeast(this.reader,buf, nr_of_bytes)</code>
ログイン後にコピー

以上がGoでCR/LF区切り文字を使用して複数行の応答を読み取る方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!