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

tanaka0325 / 課題2 #16

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

tanaka0325 / 課題2 #16

wants to merge 27 commits into from

Conversation

tanaka0325
Copy link

@tanaka0325 tanaka0325 commented Jul 17, 2020

課題2のPRになります。
以下 README.md から引用。

課題2

【TRY】io.Readerとio.Writer

- io.Readerとio.Writerについて調べてみよう
  - 標準パッケージでどのように使われているか
  - io.Readerとio.Writerがあることでどういう利点があるのか具体例を挙げて考えてみる

io.Readerとio.Writerについて調べてみよう

標準パッケージでどのように使われているか

身近なものでいうと fmtFprint 系の関数は io.Writer を引数にとり、そこに対して書き込みを行っている。
例えば Printlnio.Writer として os.StdoutFprintln に渡して処理を行っている。

標準バッケージでは上記のほかにも、画像やファイルやhttpのリクエスト/レスポンスなど「何か読み書きできるやつ」を抽象化して扱えるように io.Reader, io.Writer が使われている。

io.Readerとio.Writerがあることでどういう利点があるのか具体例を挙げて考えてみる

  • 「読み書きできるやつ」と抽象化することができるので、例えば書き込みをする関数を1つ作れば複数の構造体に対応できる
    • io.Writer がない場合、「ファイルに対して書き込みする関数」「画像に対して書き込みする関数」のように構造体ごとに関数を準備しなくてはならない
  • 抽象化することにより、具体的な構造体に依存しなくなるため、テスト時に差し替えることができモックなどでテストがしやくすなる
    • 例えば画像を扱うテストをしたい時に、実際に画像を準備する必要がない

感想

  • どういう構成にするのが良いのか考えながら何度もいじっていたらどんどん深みにハマり、何が良いのか全然わからなくなってしまった...
  • main パッケージにはテストを書くほどの処理は書かないで複雑な処理を書きたいなら別途パッケージを切るべきかな?と思ったので今回は main パッケージのテストを書いていないがそれで良いのかわからず
    • 現状で main には受け取ったオプション、引数まわりの処理などをしているので、もしパッケージを作るなら cli みたいなパッケージを作ろうと思ってますが、今くらいの規模であれば作らなくてよいかなと思いました

@tanaka0325 tanaka0325 self-assigned this Jul 17, 2020
@tanaka0325 tanaka0325 changed the title Kadai2 tanaka0325 tanaka0325 / 課題2 Jul 23, 2020
@tanaka0325 tanaka0325 marked this pull request as ready for review July 23, 2020 08:28
@tanaka0325 tanaka0325 added the kadai2 課題2 label Jul 29, 2020
@tanaka0325 tanaka0325 removed their assignment Jul 29, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kadai2 課題2
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant