Go言語をいろいろ調べていてなんとなく分かってきたので、練習にコマンドライン上で動くTODOアプリ作ってみた。
とりあえずなんとなく動くところまで作ったので、一旦やったことをまとめてみる。
#リポジトリ
#概要
$ todo -m add -t "TODOアプリをQiitaに投稿する" -d "201509021200"
とかってやると、2015/09/02 12:00までの予定として、TODOが登録される。
で
$ todo
0 2015/09/02 12:00 TODOアプリをQiitaに投稿する
こんな感じでtodoの一覧を確認できる。
そんなコマンドです。
データはJSON形式でtodo.jsonファイルに保存します。
#使ったパッケージ
- flag
- コマンドライン引数のパース
- os
- ファイル作成や削除など
- path
- OSに依存しないパスの指定など
- encoding/json
- JSONのシリアライズ/デシリアライズ
- bufio
- ファイル入出力
- time
- 時刻のフォーマット、パースなど
- fmt
- おなじみ標準出力
- github.com/kardianos/osext
- 実行ファイルが置かれているディレクトリを取得する
- これによって保存ファイルの場所が実行時のディレクトリによって変わってしまわないようにする
#開発環境
ターミナル & vim
#TODO
- コーディング
- テストコード書く
- コメントつける
- エラー処理書く
- なぜかreader.goにWrite関数を書いてしまったので分ける
- 変数名等が統一されていないので整理する
- その他リファクタリング
- 機能
- Deadlineでソートできるようにする
- 時刻でフィルターできるようにする
- 残り時間出せるようにする
- TODOが完了したらdeleteじゃなくてdoneにして、後から見返せるようにする
- その他
- readme.md書く
#所感
- よかったこと
- godocはなかなかターミナル上でも読みやすい。ググるのと併用すると理解が早い。
- この程度の規模ならvimだけでも快適に開発できる。
- やっぱり1つのものを作ってみるといろいろと理解が進む。
- よくなかったこと
- 何も考えずにファイル読み書きしようとすると、実行時のディレクトリによってプログラムが認識するカレントディレクトリが変わってしまってハマる。
- リファクタリングで使わないパッケージが出ると99%の確率でgo buildするときにimport消し忘れで怒られてげんなりする
- その他
- そういえばcommandパッケージの説明に、package.goという説明専用の.goファイル作 ったけど、これはアリなんだろうか。
- ファイル入出力のテストコードどう書くのが良いかな。。。
- timeパッケージのフォーマットの指定方法が独特すぎて一瞬何を言っているのか分からなかった。
以上。
詳しくは別途話題を絞って投稿します。