関連記事
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のおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。