8日目の記事です!当初、「golang×webassemblyで遊んでみる」みたいなタイトルで記事を書いていたのですが前日にPCがぶっ壊れて記事やコードやら全部吹っ飛んだので予定を変更して「golangでlsコマンドを作ってみる」でお送りします。ネタ元は週末に行われたgolang社会勉強会です。ネタをパクることをお許しくださいS先輩。始めにオプションなどの実装を一切考えない単純なlsコマンドを実装してみましたが、以外に少ないコード量で実装できたのでビックリしました。./go-ls.ideago-lsmain.go一応それっぽくはなってますね!ただし上記の実装だと、本来のlsコマンドとは違う挙動になります。-aで隠しファイルも表示するので-aオプションを引数にした場合だけ隠しファイルを表示するように変更してみます。-aオプションの実装というわけで-aオプションを実装してみました。実務で書いたらバグだらけで怒られそうですが、そこはご愛嬌ということで。-a.ideago-lsmain.go-aオプションをつけた場合だけ隠しファイルを表示させることが出来ました!os.Argsで引数に-a文字列があった場合に隠しファイルを表示させます。(上記の実装の場合、-a以外の文字列を指定して実行できちゃいます)-aオプションを付けない場合は「.」がついているファイルは隠しファイルだと判断して表示しません。続いて、-tオプションの実装をしたいと思います。-tオプションは「更新時間ごとにファイルを並び替える」オプションです。{continue}fmt.Println(fileInfo.Name())}}変数fileInfoの中にModTimeメソッドがあります。そのメソッドを使用することでディレクトリ配下のファイル・ディレクトリの更新時間を取得できます。あとはsortパッケージを使用してソートしてあげれば-tオプションの出来上がりです。flagパッケージを使う今までのソースコードではコマンドライン引数をos.Argsで取得していました。それでも良いのですが、より高機能なflagパッケージを使ってみます。flagパッケージを使用することでos.Argsのパラメータチェック等を行う必要がなくなります。{continue}fmt.Println(fileInfo.Name())}}まとめ思ったよりも少ないコード量でlsコマンドっぽいものが作れました。テストコードの書きやすさだったり、メンテナンスのしやすさを考えるともっと別の書き方があるとは思いますが・・・(まだまだバグもありますし)本当はもっとオプションも実装したかったのですが、そろそろ時間がなくなってきたのでこのあたりで終わります!これからもみんなで楽しんでgolangを書いていきましょう〜!今回のgo-lsコマンドのコードをgithubに置いておきます。