ホームページ  >  記事  >  バックエンド開発  >  GoでCR/LF区切り文字を使用して複数行の応答を読み取る方法?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 16:48:02564ブラウズ

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

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