Skip to content

Latest commit

 

History

History
91 lines (52 loc) · 2.55 KB

README.md

File metadata and controls

91 lines (52 loc) · 2.55 KB

Kadai1

実行方法

go build -o converter main.go
./converter -d test -sf jpg -df png

または

go run main.go -d test -sf jpg -df png


出力結果はoutputディレクトリに格納される

Options

-d 変換対象の画像が入ったディレクトリ(中にディレクトリを含めてもOK)

-sf 変換前のフォーマット(jpg,jpeg,png,gifが指定可能) デフォルトはjpg

-df 変換後のフォーマット(jpg,jpeg,png,gifが指定可能) デフォルトはpng


課題1の回答

ディレクトリを指定する

flag.Args()で受け取る値を対象のディレクトリとしました。

ディレクトリ以下は再帰的に処理する

dirwalkメソッドの中でディレクトリの場合はさらにディレクトリ内のファイルを探すようにしました。

指定したディレクトリ以下のJPGファイルをPNGに変換

オプションを指定しなかった場合、デフォルトでjpgファイルをpngファイルに変換するようにしました。

mainパッケージと分離する

画像変換処理をconvertパッケージに格納し、mainパッケージへimportして呼び出すようにしました。

ユーザ定義型を作ってみる

Fileタイプを作成しました。ファイル名と変換元のファイル形式、変換後のファイル形式を格納します。

GoDocを生成してみる

godoc -http:3000

で作成しました。

課題2の回答

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

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

サポートしている標準パッケージ

  • json
  • bytes.Buffer
  • bufio.Reader
  • os.File
  • image
  • jpeg
  • png
  • base64

インターフェイスを�実装していたり、引数として扱えるようにしている。

io.Readerとio.Writerがあることでどういう利点があるのか

  • io.Readerとio.Writerを満たした構造体(クラス)を同じように扱える �読み込み元や出力先がファイル、画面、バッファ、ネットワークなどのデータの種類に関わらず[]byteでさえあれば全て同じように処理できる。

また、例えば引数としてio.Reader型を宣言している場合、 os.Stdinやos.Fileなどio.Readerを満たしている全ての構造体を同じように扱える。

また、テスト時にio.Readerとio.Writerを実装したモックを作成することで、 入出力先をローカルファイルなどにすることでテストがやりやすくなる。