Go言語 on WSL #goreをインストール
確認環境
Spec / Version | |
---|---|
PC | mouse LB-J770X-SH2 |
OS | Windows10 Home (ver 1607 build 14393.187) |
Ubuntu(WSL) | 14.04.5 LTS |
bash(WSL) | 4.3.11(1)-release (x86_64-pc-linux-gnu) |
golang | 1.6 |
課題:気軽にHello worldしたい
Go言語はコンパイラ型言語です。
コンパイルしないといけません。
その為にはhello.goなどのファイルを作ってコンパイルして実行です。
でも、helloworldのような小さなコードを試すのに、いちいちファイル作らないといけないのは面倒です。
面倒なことは不幸です。
僕は幸せになりたいです。
解決策:Go用REPL goreを使う
PythonやRubyなどには標準でついてくるREPL環境があればちょっと幸せになるかもしれません。
REPL(read-eval-print-loop)というのはその名の通り、プログラムを読み込んで評価して結果を出力する動作を繰り返すプログラムです。
GoにもgoreというREPLがあるようです。
$ go get github.com/motemen/gore go build github.com/motemen/gore: /usr/lib/go/pkg/tool/linux_amd64/compile: read |0: interrupted system call
なんかシステムコールが中断したそうです。
なんでやねん。
go build command-line-arguments: read |0: interrupted system call
ごめんよ、パトラッシュ。いま僕はhelloworldしたいんだ。
ということで、もう一度同じコマンドを実行するとエラーは出なくなり、$GOPATH/bin以下にgore
という実行ファイルも追加されていました。
なんでやねん。
いつか気が向いたら調べてみよう。
キーワードは「SA_RESTART」でしょうか。
hello world @golang
さ、気を取り直してhelloworldです。
$ gore gore version 0.2.6 :help for help gore> println("hello world!") hello world! gore>
できた!
出力が一瞬遅れるところは裏でコンパイルしてるのでしょうか。
いや、気のせいかな。もう一度やってみよう。
gore> println("hello world!") hello world! hello world! gore> println("hello world!") hello world! hello world! hello world! gore>
ナニコレ。出力が増えていってる。
その理由はgore上で:print
コマンドを実行すれば分かります。
gore> :print package main import "github.com/k0kubun/pp" func __gore_p(xx ...interface{}) { for _, x := range xx { pp.Println(x) } } func main() { println("hello world!"); println("hello world!"); println("hello world!") } gore>
なるほど、バッファだか一時ファイルだかにコードを保存しておいて、それをgo run
やっている気がしますね。
うーん、ホントかな?
きっとつづく。