-
Notifications
You must be signed in to change notification settings - Fork 2
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
Kadai2 simady #16
base: master
Are you sure you want to change the base?
Kadai2 simady #16
Conversation
) | ||
|
||
// IConverter コンバーターインターフェース | ||
type IConverter interface { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Goでは先頭にI
とつける習慣はない。
|
||
// IConverter コンバーターインターフェース | ||
type IConverter interface { | ||
convert(file *os.File, img image.Image) error |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
型名がexportされているのにメソッド名がexportされていない理由は?
) | ||
|
||
// Validate フィールドのバリデーション処理を行う. | ||
func (c converter) validate() bool { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
構造体の場合、特に理由がない場合はレシーバにはポインタを使う。
https://qiita.com/knsh14/items/8b73b31822c109d4c497#receiver-type
return validate(c.src) && validate(c.dst) | ||
} | ||
|
||
func validate(ext string) bool { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なぜメソッドでやらずに関数で行う?
} | ||
|
||
func validate(ext string) bool { | ||
for _, e := range convertibleExts { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mapを使えば関数不要そう。
https://play.golang.org/p/11bEbuN1BLW
|
||
src, err := os.Open(path) | ||
if err != nil { | ||
log.Fatalf("Faild to open file. err = %v\n", err) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
log.Fatal
は中でos.Exit
を呼び出すので基本的にmain
関数以外では使わない。
error
を返す。
main
関数であってもox.Exit
に渡す終了コードを指定することができないため、基本的には使わない。
if err != nil { | ||
log.Fatalf("Faild to create file. err = %v\n", err) | ||
} | ||
defer dst.Close() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
書き込み用のファイルは閉じる際にエラー処理をする。
switch dst { | ||
case "png": | ||
return pngConverter{c} | ||
case "jpeg": |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
jpg
も扱えるようにしたほうが良さそう。
} | ||
|
||
// GetConverter 拡張子に対応したコンバーターを取得する. | ||
func GetConverter(src, dst string) IConverter { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
GoではGet
という単語はあんまり使わない。
"testing" | ||
) | ||
|
||
func TestGetConverter(t *testing.T) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
テーブル駆動テストをする
func TestGetConverter(t *testing.T) { | ||
var c IConverter | ||
c = GetConverter("jpeg", "png") | ||
if _, ok := c.(pngConverter); !ok { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
せっかくインタフェースにしているのに、テストが具体的な実装に依存しているのはあまりよくない。
1回目の宿題のテストを作ってみて下さい
テーブル駆動テストを導入しました。
テストヘルパーの作成はまだできていません。
io.Readerとio.Writerについて調べてみよう
byte型のスライスを引数に取り、pに値を読み込む。
読み込んだバイト数とエラーを返す。
byte型のスライスを引数に取り、pから値を書き込む。
書き込んだバイト数とエラーを返す。
上記のように様々な箇所での読み書きに使用されていた。
また、以下のようなerrorの戻り値を利用するような使い方も見られた。