おそらくはそれさえも平凡な日々

ファイル保存毎じゃなくて、テスト走らせる毎にgoimportsを走らせるようにした

GOPATHにGo以外の一切合切のrepoも入れているとGOPATHが肥大しgoimportsが遅くなる問題があり、僕のマシンだと数秒かかってしまうようになっている。これでは保存毎にgoimportsを走らせると流石にストレスが大きい。特に無意識で保存を連打したりするとvimが長らく固まったりしてしんどい。とは言えgoimportsは便利なので使わないわけにはいかない。

ということで、go testを走らせる直前に一括でgoimportsをかけるようにした。雑にgo-testというコマンドを作った。

この中で呼んでいるbundle-goimportsというコマンドが割と肝で、これはgit repo上の未コミット状態のgoファイルに対して一括でgoimportsをかけるようになっている。テストを回さない場合はこのコマンドを叩くだけで良い。

しかし、この中ではgoimportsを直接呼ばす、lazy-goimportsというコマンドを呼んでいる。これは何か?

これは、前回と同じ内容のgoファイルに対してはgoimportsをかけないようにするためのものです。前回goimportsをかけたファイルの内容のハッシュを適当にキャッシュしておいてそれと現在の内容を比較して、新たにgoimportsにかけるべきか否かを判定するようになっています。これは変更ファイルそれぞれ全部に対して毎回goimportsを走らせていると時間がかかってしまうのでこういうのをこしらえた。雑な感じのコードだけど機能してます。

こういう感じにしておけば、ちょっとコードを書いて、ちょっとテストを書いて、テスト走らせて確認、という、LLと同じようなサイクルでGoを書くのがストレス無くできるので良い感じ。

ということでPerlのコードしか出てこないGoの記事でした

created at
last modified at

2015-03-23T01:03:16+0900

comments powered by Disqus