関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
少し前に io.MultiWriter
についてのメモを書いたので、ついでに io.MultiReader
についてのメモです。
io.MultiReader
も意外と知らない人が周りには多かったです。便利ですよ。
サンプル
package ioop import ( "fmt" "io" "os" ) // MultiRead は、io.MultiReaderを利用して複数のファイルを一気に読み込むサンプルです。 // // > MultiReader returns a Reader that's the logical concatenation of the provided input readers. // They're read sequentially. Once all inputs have returned EOF, Read will return EOF. // If any of the readers return a non-nil, non-EOF error, Read will return that error. // // > MultiReaderは、与えられた入力リーダーを論理的に連結したリーダーを返します。 // 順次読み込まれ、すべての入力がEOFを返したらEOFを返します。 // いずれかのリーダがEOF以外のエラーを返した場合、Readはそのエラーを返します。 // // # REFERENCES // // - https://pkg.go.dev/io@go1.22.2#MultiReader func MultiRead() error { const ( F1 = "go.mod" F2 = ".gitpod.yml" F3 = "main.go" ) var ( f1, f2, f3 *os.File err error ) if f1, err = os.Open(F1); err != nil { return err } defer f1.Close() if f2, err = os.Open(F2); err != nil { return err } defer f2.Close() if f3, err = os.Open(F3); err != nil { return err } defer f3.Close() var ( r = io.MultiReader(f1, f2, f3) buf []byte ) buf, err = io.ReadAll(r) if err != nil { return err } fmt.Println(string(buf)) return nil }
try-golang/examples/basic/ioop/multiread.go at main · devlights/try-golang · GitHub
実行すると以下のようになります。
$ task task: Task "build" is up to date task: [run] ./try-golang -onetime ENTER EXAMPLE NAME: ioop_multiread [Name] "ioop_multireader" module github.com/devlights/try-golang go 1.22 require ( github.com/devlights/gomy v0.6.0 github.com/pelletier/go-toml/v2 v2.2.1 github.com/shopspring/decimal v1.4.0 golang.org/x/crypto v0.22.0 golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 golang.org/x/sync v0.7.0 golang.org/x/term v0.19.0 golang.org/x/text v0.14.0 gopkg.in/ini.v1 v1.67.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 ) require golang.org/x/sys v0.19.0 // indirect image: file: .gitpod.Dockerfile tasks: - name: initial init: go install github.com/go-task/task/v3/cmd/task@latest && go install honnef.co/go/tools/cmd/staticcheck@latest && go install golang.org/x/tools/cmd/goimports@latest && go install github.com/go-delve/delve/cmd/dlv@latest && task build command: go version vscode: extensions: - golang.go - TakumiI.markdowntable package main import "github.com/devlights/try-golang/cmd" func main() { cmd.Execute() } [Elapsed] 130.07µs
参考情報
https://pkg.go.dev/io@go1.22.2#MultiReader
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。