GoのREPL goreを使用する
golang
Lastmod: 2020-10-19

Java の jshell、python のインタラクティブシェルのように、Go でも REPL(対話的にコードを逐次実行させる機能) gore を使用できる。

Install

$ go get github.com/motemen/gore/cmd/gore

Usage

gore コマンドを使用することで、REPL が実行される。

$ gore
gore version 0.5.0  :help for help
gore> :import "fmt"
gore> fmt.Println("hello")
hello
6
nil
gore>

必要なパッケージは :import でインポートする。

-autoimport フラグを有効にすることで、自動的にパッケージインポートを実行してくれる。

$ gore -autoimport

また -context オプションで .go ファイル名を渡すと、指定した go ファイル上の定義を引き継いだ上で、処理を gore REPL 上で続行できる。

context.go

package main

import "fmt"

func start() {
	fmt.Println("exec context.go .")
}
$ gore -context context.go
gore version 0.5.0  :help for help
added file context.go
gore> start()
exec context.go .
gore> fmt.Println("on REPL.")
exec context.go .
on REPL.
9
nil
gore>

(一回呼んだ関数が何故か毎回呼ばれ続けてるので、一応 issue 投げたhttps://github.com/motemen/gore/issues/185)

REPL を終了するには、 <Ctrl-D> を押す。

(^D to quit)
gore> %

gore 上のコード補完

gocode をインストールすることで、gore REPL 上でも IDE のようなコード補完機能が使用できる。

$ go get github.com/nsf/gocode

<tab> キーを押すと、その時点で候補となる入力が自動挿入される。
入力候補は <tab> キーを連続して押すことで切り替えられる。

参考文献