Interactive shell for Golang¶
Golang用の対話形式シェル Gosh を作りましたよ、というお話です。
Golangでコードを書き始めた今年の年初くらいから、iPythonのような対話形式のシェルがほしいなと思っていました。気になるライブラリをちょっと試してみたいときに、 go get して、Emacsでコード書いて、 go run を実行する、というのは億劫で、 import したらそのまま go get して実行できれば良いな、と思っていました。 そういったツールが無いかと調べて、go-eval や igo や Go playground [1] にはたどり着いたのですが、パッケージをインポートする機能がないので自分の欲しい機能とは違う、ということでエイヤっと作ってみました。
特徴¶
現在の特徴としては次のとおりです。
- Go 1.2 以上対応
- 対話形式のシェル
- package main の入力省略可 [2]
- 標準ライブラリの import 省略可
- 標準ライブラリ以外のライブラリの import 可 [3]
- import 文の重複入力を無視
- import しても未使用のパッケージを無視
- Ctrl + d で終了
やっていることとしては、単に入力したコードからを、一時ファイル作って go run を実行するだけの簡単な内容です。
インストール方法や使い方は、 README を読んでください。
今後¶
- main() を入力しないと実行できないので省略できるようにする
- タブ補完
- DebianパッケージなどでシステムグローバルにインストールしたGolangライブラリなどの import を省略できるようにする
などを考えています。良かったら使ってみて下さい。
Footnotes
[1] | ブラウザで実行したいわけではないので、Go Playgroundだと更に自分のほしいのと違うのですよね。 |
[2] | 入力を省略できる、というか、入力するとエラーになります。 修正しました。(2014-11-18 追記) |
[3] | import example.org/foo/bar のように実行すると、 go get します。 |