Released Gosh 0.2.0¶
Golang用の対話形式シェル Gosh の 0.2.0 をリリースしました。
前回のブログ(Interactive shell for Golang)の時は、 0.1.5 でしたので、そこからの変更点をまとめると次の通りです。
main関数の宣言を省略可能にしました
型および関数の宣言のパーサーの機能強化しました
関数宣言の再宣言可能にしました
Go 1.2のサポート廃止しました
各種バグの修正
などです。実装としてはregexpパッケージの正規表現から、go/scanner, go/tokenパッケージを利用した字句解析に変更しています。
main関数の省略¶
README にも記載していますが、簡単に紹介します。
Goshの実行方法¶
$ $GOPATH/bin/gosh
fmt.PrintlnでのHello world¶
>>> fmt.Println("Hello world")
Hello world
>>>
変数の宣言と演算¶
>>> var i = 10
>>> i++
>>> fmt.Println(i)
11
>>>
省略形式の変数宣言でも大丈夫です。
>>> i := 10
>>> i += 100
>>> fmt.Println(i)
111
>>>
パッケージのインポート¶
Goshを作ったそもそもの動機である、パッケージのインポートはもちろん使えます。 次は github.com/bitly/go-simplejson を使った場合の例です。
>>> import "github.com/bitly/go-simplejson"
>>> r, _ := http.Get("http://d.palmtb.net/_static/glaneuses.json")
>>> defer r.Body.Close()
>>> j, _ := simplejson.NewFromReader(r.Body)
>>> fmt.Println(j)
表示は省略しましたが、simplejson.Json型のデータが出力されます。
main関数の宣言のリセット¶
>>> func main(){}
とするとmain関数の宣言を省略して宣言した変数はクリアされます。
fmt.Print*の実行は一回のみ¶
fmt.Println("hello")
などを実行後、その後に他の入力を続けても、最初に実行された fmt.Println("hello")
は実行されないようにしました。つまり、次のようになります。
>>> i := 1
>>> fmt.Println(i)
1
>>> i++
>>> fmt.Println(i)
2
既知の問題¶
余談¶
前のブログでは matsuu さんの tweet やHacker Newsへの 投稿 でかなりStarsがつきました。海外の方が多いのは結構モチベーションが上がりますね。matsuuさん、ありがとうございました。
あとは、実際に使ってissues登録やpull requestしてくれる方が出てくると嬉しいですね。
Footnotes
- 1
上記の例で空白行を掲載しているのはそのためです。