Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kadai3-2-en-ken #39

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
Open

kadai3-2-en-ken #39

wants to merge 15 commits into from

Conversation

en-ken
Copy link

@en-ken en-ken commented Sep 1, 2019

課題3-2

分割ダウンローダを作ろう

  • Rangeアクセスを用いる
  • いくつかのゴルーチンでダウンロードしてマージする
  • エラー処理を工夫する
    • golang.org/x/sync/errgroupパッケージなどを使ってみる
  • キャンセルが発生した場合の実装を行う

使い方

go get github.com/gopherdojo/dojo6/kadai3-2/en-ken/dl-mgr
div -n [goroutineの並列数(デフォルト:5)] -o [保存ファイル名(デフォルト:リモート名)] URL

やったこと

  1. HEADリクエストしてAccept-Rangesヘッダの有無確認
  2. Accept-Rangesがあった場合、
    1. 任意の分割数に応じて、goroutineごとの割当範囲を決めて、各goroutineでRange GET
    2. 部分ファイルに出力
  3. 全部ダウンロードできたら、ファイルをマージして部分ファイル削除

工夫した点

  • 1つのgoroutineがダウンロードするデータが1MBを超えた場合、1MBごとにファイル出力する。
  • Rangeアクセスに対応していなかったら普通にダウンロードする。
  • すでにダウンロード済のデータがあった場合(そのパートのファイルがあった場合)、それを再利用する。

困っていること

  • go testのやり方がいまいちわかっていない。依存関係の解決の仕方が理解に至っていない。
    • go test *.goだとexport_test.goが解決できない
    • go test ./だと解決できる
    • go test ./...するとutils以下がimport cycleで失敗してしまう
    • go test ./utils/*だとutilsだと問題ない
      • go test -cover ./utils/*でちゃんとカバレッジがどれない

@en-ken en-ken added the kadai3-2 label Sep 1, 2019
@en-ken en-ken requested a review from tenntenn September 1, 2019 04:17
@en-ken en-ken self-assigned this Sep 1, 2019
@en-ken en-ken changed the title Kadai3 2 en ken kadai3-2-en-ken Sep 1, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant