-
Notifications
You must be signed in to change notification settings - Fork 182
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
Kadai1 s-shiraki #76
base: master
Are you sure you want to change the base?
Kadai1 s-shiraki #76
Conversation
kadai1/args/args.go
Outdated
@@ -0,0 +1,18 @@ | |||
package args |
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.
ここは特に主要なロジックがあるわけではないので、別パッケージに分けずにmainパッケージに含めて良さそうです。
kadai1/convert/convert.go
Outdated
if err != nil { | ||
return err | ||
} | ||
slice := strings.Split(path, ".") |
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.
拡張子を取るにはfilepath.Extというライブラリ及び関数があるのでそれを使った方が良さそうです。なお、このやり方だと.があるディレクトリ名と拡張子のないファイル名が組み合わさった時に誤動作するので好ましくないです。
https://play.golang.org/p/Jn50hY_Mt9B
|
||
func GetSelectedExtensionPath(fileType string, directory string) [][]string { | ||
var retval [][]string | ||
err := filepath.Walk(directory, func(path string, info os.FileInfo, err error) 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.
パスはディレクトリも含んでいるため、ディレクトリではないかのチェックが必要です。
例えばxxx.jpgという名前のディレクトリがあると誤動作します。
kadai1/convert/convert.go
Outdated
return nil | ||
}) | ||
if err != nil { | ||
log.Fatal(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.
エラーはここで処理せずにmain関数にreturnしてmain関数で処理をした方が良く、そうするのがGoでは一般的です。理由としては呼び出し元でエラーをどう処理するかを委ねられること、エラーが発生しうる関数であることを明示できることなどがあります。具体的にはこのライブラリをcli以外で扱うことになったらここでlog.Fatalで落とすのが望ましくありません。
kadai1/convert/convert.go
Outdated
"strings" | ||
) | ||
|
||
func GetSelectedExtensionPath(fileType string, directory string) [][]string { |
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.
パスを返す関数なので[]stringで返した方が良さそうです。pathのみをappendしてその後の処理はパスを利用する関数で処理するのが良いかと思います。
kadai1/convert/convert.go
Outdated
} | ||
defer fso.Close() | ||
|
||
switch { |
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.
以下のようにするのがシンプルかと思います。なお、元々の書き方だとtoと実際のエンコードの関数が逆になっているように思います。
switch to {
case "jpg","jpeg":
jpeg.Encode(fso, img, nil)
case "png":
png.Encode(fso, img)
default:
//エラー処理
}
kadai1/convert/convert.go
Outdated
|
||
switch { | ||
case (from == "jpg" || from == "jpeg") && to == "png": | ||
jpeg.Encode(fso, img, nil) |
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.
pngもそうですが、エンコード処理はエラーになりうるもので関数もエラーを返しているのでエラー処理が必要です。
おそらく不要である画像ファイルがコミットされているので消した方が良いです。テストデータとして画像をあげるケースもあるかと思うのですが、その時にはtestdataというディレクトリとし(go上でテストデータとして扱われます)、ファイルサイズも小さなものとすると良いでしょう(今上がっているMBを超えているファイルはでかいです)。 |
課題 1:画像変換コマンドを作ろう
お忙しいところ恐れ入りますが、もしよろしければレビューを頂けますと幸いです
画像を指定の形式に変換する
変換後の画像ファイルは元の画像と同じディレクトリに配置される
コマンドラインオプション
使い方