Gopher道場 自習室 課題をやってみた

Go言語 そのものの力を伸ばしたいと思って メルカリのtenntennさんが開催しているGopher道場の課題に挑戦してみました。

課題1では画像形式を変更するコマンドラインを作成します。 今回はその時使ったパッケージや気づきを紹介したいと思います。 車輪の再発明ですが知識の定着を目的にアウトプットしたいと思います。

flag パッケージ

pkg.go.dev

以下のよう書くことでフラグを定義することができる。

var (
    flag1 = flag.String("flag1", "defaultFlag", "usage")
    flag2 = flag.Bool("flag2", false, "usage")
)

func main() {
    flag.Parse()
    fmt.Println(*flag1, *flag2)

}

flag.Args()ではコマンドラインから引数を取得できる。

func main() {
    flag.Parse()
    args := flag.Args()
    fmt.Println(args)
}

CLIを作成する時にコマンドをいい感じに扱える。

サードパーティと比較している面白い記事があったが、サードパーティを使用しているライブラリも多いみたいだ。

qiita.com

path/filepath パッケージ

ファイルのパスを操作することができる。

pkg.go.dev

IsAbs() 絶対パスかどうか真偽値を返す

isAbs := failePath.IsAbs(path)

Abs() 相対パス絶対パスに変換する

absPath, err := filepath.Abs(path)

Ext() ファイルパスから拡張子を返す

ext := filepath.Ext(fileName)

Walk() 第1引数で指定したパス以下に第二引数の関数を実行していく。

err := filepath.Walk(c.srcDirPath, func(path string, info os.FileInfo, err error) error {
  fmt.Println(path)
  return nil
})

Join() パスを連結する

filepath.Join("hoge", "huga") // hoge/fuga

os パッケージ

os機能

pkg.go.dev

MkdirAll()

新しいディレクトリを作るメソッド 第1引数には ディレクトリ名、第2引数はパーミッションを指定する

os.MkdirAll(newFileDirName, 0777)

image パッケージ

pkg.go.dev

Decode() image.Image型にデコード

image.Decode(file)

"image/jpeg" "image/png"

Encode() image.Image型をエンコードする

jpeg.Encode(newfile, img)
png.Encode(newfile, img)

以上 ざっと課題に使ったパッケージやメソッドを復習してみました。

さいごに

普段 BtoC webシステムを開発していてCLIファイルシステムをあまり意識していないので、大変勉強になりました。 標準パッケージ縛りというのもよかったですね。

課題は4まであるのと、その先には昇段試験もあるので挑戦していきたいと思います。

最後に、 このブログではweb開発について発信していくのでまたご覧頂けると嬉しいです。 最後までお読み頂きありがとうございました。