Skip to content

Commit b47a0a7

Browse files
committed
Add examples/basic/ioop/multiread.go
1 parent 9c0697b commit b47a0a7

File tree

4 files changed

+134
-10
lines changed

4 files changed

+134
-10
lines changed

examples/basic/ioop/README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
このディレクトリには以下のサンプルがあります。
44

5-
| file | example name | note |
6-
| --------------- | ----------------- | ------------------------------------------------------------------------------ |
7-
| limitread.go | ioop_limit_read | io.LimitedReader のサンプルです. |
8-
| onebyteread.go | ioop_onebyte_read | 1バイトずつ読み出す io.LimitedReader のサンプルです. |
9-
| gzip_and_crc.go | ioop_gzip_and_crc | io.MultiWriterを利用してgzip圧縮しながらCRCチェックサムも算出するサンプルです. |
5+
| file | example name | note |
6+
| -------------- | ----------------- | ------------------------------------------------------------------------------ |
7+
| limitread.go | ioop_limit_read | io.LimitedReader のサンプルです. |
8+
| onebyteread.go | ioop_onebyte_read | 1バイトずつ読み出す io.LimitedReader のサンプルです. |
9+
| multiwrite.go | ioop_multiwrite | io.MultiWriterを利用してgzip圧縮しながらCRCチェックサムも算出するサンプルです. |
10+
| multiread.go | ioop_multiread | io.MultiReaderを利用して複数のファイルを一気に読み込むサンプルです。 |

examples/basic/ioop/examples.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ func NewRegister() mapping.Register {
1717
func (r *register) Regist(m mapping.ExampleMapping) {
1818
m["ioop_limit_read"] = LimitRead
1919
m["ioop_onebyte_read"] = OneByteRead
20-
m["ioop_gzip_and_crc"] = GzipAndCrc
20+
m["ioop_multiwrite"] = MultiWrite
21+
m["ioop_multireader"] = MultiRead
2122
}

examples/basic/ioop/multiread.go

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package ioop
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"os"
7+
)
8+
9+
// MultiRead は、io.MultiReaderを利用して複数のファイルを一気に読み込むサンプルです。
10+
//
11+
// > MultiReader returns a Reader that's the logical concatenation of the provided input readers.
12+
// They're read sequentially. Once all inputs have returned EOF, Read will return EOF.
13+
// If any of the readers return a non-nil, non-EOF error, Read will return that error.
14+
//
15+
// > MultiReaderは、与えられた入力リーダーを論理的に連結したリーダーを返します。
16+
// 順次読み込まれ、すべての入力がEOFを返したらEOFを返します。
17+
// いずれかのリーダがEOF以外のエラーを返した場合、Readはそのエラーを返します。
18+
//
19+
// # REFERENCES
20+
//
21+
// - https://pkg.go.dev/io@go1.22.2#MultiReader
22+
func MultiRead() error {
23+
const (
24+
F1 = "go.mod"
25+
F2 = ".gitpod.yml"
26+
F3 = "main.go"
27+
)
28+
29+
var (
30+
f1, f2, f3 *os.File
31+
err error
32+
)
33+
34+
if f1, err = os.Open(F1); err != nil {
35+
return err
36+
}
37+
defer f1.Close()
38+
39+
if f2, err = os.Open(F2); err != nil {
40+
return err
41+
}
42+
defer f2.Close()
43+
44+
if f3, err = os.Open(F3); err != nil {
45+
return err
46+
}
47+
defer f3.Close()
48+
49+
var (
50+
r = io.MultiReader(f1, f2, f3)
51+
buf []byte
52+
)
53+
54+
buf, err = io.ReadAll(r)
55+
if err != nil {
56+
return err
57+
}
58+
59+
fmt.Println(string(buf))
60+
61+
return nil
62+
63+
/*
64+
$ task
65+
task: [build] go build .
66+
task: [run] ./try-golang -onetime
67+
68+
ENTER EXAMPLE NAME: ioop_multiread
69+
70+
[Name] "ioop_multireader"
71+
module github.com/devlights/try-golang
72+
73+
go 1.22
74+
75+
require (
76+
github.com/devlights/gomy v0.6.0
77+
github.com/pelletier/go-toml/v2 v2.1.1
78+
github.com/shopspring/decimal v1.3.1
79+
golang.org/x/crypto v0.21.0
80+
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225
81+
golang.org/x/sync v0.6.0
82+
golang.org/x/term v0.18.0
83+
golang.org/x/text v0.14.0
84+
gopkg.in/ini.v1 v1.67.0
85+
gopkg.in/natefinch/lumberjack.v2 v2.2.1
86+
gopkg.in/yaml.v3 v3.0.1
87+
)
88+
89+
require golang.org/x/sys v0.18.0 // indirect
90+
image:
91+
file: .gitpod.Dockerfile
92+
93+
tasks:
94+
- name: initial
95+
init:
96+
go install github.com/go-task/task/v3/cmd/task@latest &&
97+
go install honnef.co/go/tools/cmd/staticcheck@latest &&
98+
go install golang.org/x/tools/cmd/goimports@latest &&
99+
go install github.com/go-delve/delve/cmd/dlv@latest &&
100+
task build
101+
command:
102+
go version
103+
104+
105+
vscode:
106+
extensions:
107+
- golang.go
108+
- TakumiI.markdowntable
109+
package main
110+
111+
import "github.com/devlights/try-golang/cmd"
112+
113+
func main() {
114+
cmd.Execute()
115+
}
116+
117+
118+
119+
[Elapsed] 1.06411ms
120+
*/
121+
122+
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import (
1111
"github.com/devlights/gomy/output"
1212
)
1313

14-
// GzipAndCrc は、io.MultiWriterを利用してgzip圧縮しながらCRCチェックサムも算出するサンプルです.
14+
// MultiWrite は、io.MultiWriterを利用してgzip圧縮しながらCRCチェックサムも算出するサンプルです.
1515
//
1616
// # REFERENCES
1717
//
1818
// - https://pkg.go.dev/io@go1.22.2#MultiWriter
1919
// - https://pkg.go.dev/hash/crc32@go1.22.2#NewIEEE
2020
// - https://pkg.go.dev/compress/gzip@go1.22.2#Writer
2121
// - https://pkg.go.dev/encoding/hex@go1.22.2#Dumper
22-
func GzipAndCrc() error {
22+
func MultiWrite() error {
2323
var (
2424
data = []byte("hello world こんにちは 世界")
2525
buf = new(bytes.Buffer)
@@ -48,9 +48,9 @@ func GzipAndCrc() error {
4848
task: [build] go build .
4949
task: [run] ./try-golang -onetime
5050
51-
ENTER EXAMPLE NAME: fileio_multiwriter
51+
ENTER EXAMPLE NAME: ioop_multiwrite
5252
53-
[Name] "fileio_multiwriter_gzipandcrc"
53+
[Name] "ioop_multiwrite"
5454
00000000 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 e3 81 93 e3 |hello world ....|
5555
00000010 82 93 e3 81 ab e3 81 a1 e3 81 af 20 e4 b8 96 e7 |........... ....|
5656
00000020 95 8c |..|

0 commit comments

Comments
 (0)