以下の内容はhttps://devlights.hatenablog.com/entry/2024/05/13/073000より取得しました。


Goメモ-410 (指定したサイズ分だけ読み出す)(io.LimitReader)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。たまに使いたいときに忘れるので、ここにメモメモ。。。

ioパッケージの下には、ある目的に特化したストリームがいろいろあります。

今回は、指定したサイズ分だけ読み出す動きをしてくれる io.LimitReader について。

サンプル

package ioop

import (
    "bytes"
    "io"

    "github.com/devlights/gomy/output"
)

// LimitRead は、io.LimitedReader のサンプルです.
//
// 通信データのように固定部分を決まったサイズで読み取るときなどに便利。
//
// # REFERENCES
//   - https://pkg.go.dev/io@go1.19.3#LimitedReader
func LimitRead() error {
    const (
        ReadSize = 0x04
        BufSize  = 0xff
    )

    var (
        message     = "hello world"
        src         = bytes.NewBufferString(message)
        limitReader = io.LimitReader(src, ReadSize)
    )
    output.Stdoutf("[LimitReader]", "original: %v\n", message)

    for {
        var (
            buf  = make([]byte, BufSize)
            size int
            err  error
        )

        size, err = limitReader.Read(buf)
        if err != nil {
            if err == io.EOF {
                break
            }
            return err
        }

        output.Stdoutf("[LimitRead]", "%d byte(s) read: %v\n", size, string(buf[:size]))
    }

    return nil
}

try-golang/examples/basic/ioop/limitread.go at main · devlights/try-golang · GitHub

実行すると以下のようになります。

$ task
task: [build] go build .
task: [run] ./try-golang -onetime

ENTER EXAMPLE NAME: ioop_limit_read

[Name] "ioop_limit_read"
[LimitReader]        original: hello world
[LimitRead]          4 byte(s) read: hell


[Elapsed] 22.76µs

参考情報

Goのおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。




以上の内容はhttps://devlights.hatenablog.com/entry/2024/05/13/073000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14