Skip to content

Commit 7d93cd1

Browse files
committed
Replace channel with errgroup
1 parent 2c22f68 commit 7d93cd1

File tree

4 files changed

+71
-21
lines changed

4 files changed

+71
-21
lines changed

kadai3-2/hioki-daichi/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
/parallel-download
22
/coverage/
3+
/vendor/

kadai3-2/hioki-daichi/Gopkg.lock

+25
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kadai3-2/hioki-daichi/Gopkg.toml

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Gopkg.toml example
2+
#
3+
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
4+
# for detailed Gopkg.toml documentation.
5+
#
6+
# required = ["github.com/user/thing/cmd/thing"]
7+
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
8+
#
9+
# [[constraint]]
10+
# name = "github.com/user/project"
11+
# version = "1.0.0"
12+
#
13+
# [[constraint]]
14+
# name = "github.com/user/project2"
15+
# branch = "dev"
16+
# source = "github.com/myfork/project2"
17+
#
18+
# [[override]]
19+
# name = "github.com/x/y"
20+
# version = "2.4.0"
21+
#
22+
# [prune]
23+
# non-go = false
24+
# go-tests = true
25+
# unused-packages = true
26+
27+
28+
[[constraint]]
29+
branch = "master"
30+
name = "golang.org/x/sync"
31+
32+
[prune]
33+
go-tests = true
34+
unused-packages = true

kadai3-2/hioki-daichi/downloader/downloader.go

+11-21
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"path"
1010

1111
"github.com/gopherdojo/dojo3/kadai3-2/hioki-daichi/bytesranger"
12+
"golang.org/x/sync/errgroup"
1213
)
1314

1415
var errExist = errors.New("downloader: file already exists")
@@ -42,42 +43,31 @@ func (d *Downloader) Download() error {
4243
return err
4344
}
4445

45-
ch := make(chan map[int]*http.Response)
46+
responses := map[int]*http.Response{}
4647

47-
// send to channels...
48+
eg := errgroup.Group{}
4849
for i, bytesrangeString := range bytesrangeStrings {
4950
i := i
5051
bytesrangeString := bytesrangeString
51-
go func() {
52+
eg.Go(func() error {
5253
resp, err := d.getHTTPResponseWithinRange(bytesrangeString)
5354
if err != nil {
54-
panic(err) // TODO: error handling
55+
return err
5556
}
56-
57-
fmt.Fprintf(d.OutStream, "ch snd [i: %d, ContentLength: %d, Range: %s]\n", i, resp.ContentLength, bytesrangeString)
58-
59-
ch <- map[int]*http.Response{i: resp}
60-
}()
61-
}
62-
63-
// receive channels...
64-
responses := make(map[int]*http.Response, 0)
65-
for i := 0; i < len(bytesrangeStrings); i++ {
66-
m := <-ch
67-
68-
for i, resp := range m {
69-
fmt.Fprintf(d.OutStream, "ch rcv [i: %d, ContentLength: %d]\n", i, resp.ContentLength)
70-
57+
fmt.Fprintf(d.OutStream, "i: %d, ContentLength: %d, Range: %s\n", i, resp.ContentLength, bytesrangeString)
7158
responses[i] = resp
72-
}
59+
return nil
60+
})
61+
}
62+
if err := eg.Wait(); err != nil {
63+
return err
7364
}
7465

7566
fp, err := os.OpenFile(filename, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0644)
7667
if err != nil {
7768
return err
7869
}
7970

80-
// concat responses...
8171
for i := 0; i < len(responses); i++ {
8272
resp := responses[i]
8373
_, err := io.Copy(fp, resp.Body)

0 commit comments

Comments
 (0)