Go 提供 REPL 吗?

274

交互式环境对程序员来说非常有帮助。但是,似乎 Go 语言并没有提供它。我的理解正确吗?

13个回答

212
不,Go没有提供REPL(读取-求值-输出循环)。
然而,正如已经提到的那样,Go Playground非常方便。 Go作者也在考虑向其添加一个功能丰富的编辑器。
如果您想要本地的东西,请考虑安装hsandbox。只需使用hsandbox go运行它,就可以在每次保存时将终端屏幕分成两部分(使用screen),您可以在顶部编写代码并在底部查看其执行输出。
在标准的Go命令中有一个gotry,它用于评估表达式(带有可选的包名称),可以像从shell中运行gotry 1+2gotry fmt 'Println("hello")'一样运行。它不再可用,因为实际使用它的人不多。
我还看到过第三方项目用于构建Go的REPL,但现在我只能找到两个链接:igogo-repl。它们的工作效果如何我不知道。
我的看法是:编译速度使得Go可以编写REPL,同时也有助于构建这里提到的工具,但是同样的速度使得REPL不再必要。每当我想在Go中测试一些无法在Playground中运行的东西时,我会打开一个简单的.go文件并开始编码,然后简单地运行代码。当Go 1中的go命令使一键构建过程变得可能和更加容易时,这将变得更加容易。
更新:Go的最新周版本添加了go命令,可以用于非常轻松地构建文件:编写您的prog.go文件并运行go build prog.go && ./prog
更新2:使用Go 1,您可以直接运行go程序,方法是go run filename.go
更新3:gore是一个看起来很有趣的新项目。

简而言之,Igo不太方便,因为它需要粘贴和Ctrl-D。类似于Reinteract的Go语言工具将是非常棒的。 - user246672
6
似乎有两个名为"gore"的REPL项目。这个比答案中提到的那个更活跃地维护着:https://github.com/motemen/gore - Bijan
2
哈,我正想发布同样的内容。我刚刚在使用 motemen/gore 进行实验 - 它非常不错。 - Darragh Enright
1
gore 是非常好用且简单的工具。 - Junv

66

1
你正在使用哪个程序来显示你的输入?我喜欢那个。 - jclasley
@jclasley 它在存储库的自述文件中。https://github.com/cho45/KeyCast 仅适用于MacOS。 - Phani Rithvij

11

您还有一个最近的项目(2013年3月)叫做gore,作者是Sriram Srinivasan,它可能会很有用:

gore是一个Golang代码的命令行求值器--可以说是没有循环的REPL。
它是go playground的替代品,让交互式地尝试代码片段更加容易:gore自动提供样板代码,如导入和包声明以及main函数包装器
同时,由于它在您自己的计算机上运行,因此不会出现安全方面的拒绝代码(与go playground的安全沙盒模式不同)。


8
如果你是Vim用户,vim-go插件(https://github.com/fatih/vim-go)提供了一个命令(GoRun),可以运行并打印当前缓冲区的输出。你仍然需要包含一个主Go文件的所有样板代码,但它仍然提供了一种方便的方式来快速测试本地环境中的代码片段。

enter image description here


1
如何使GoRun的输出显示在当前缓冲区中?我的vim将其显示在shell中。 - zztczcx
vim-go无所不能!然而,为了更进一步,我会删除样板代码,将我的“package_test.go”放在分割缓冲区中,并继续使用:GoTest和:GoCoverage。这是我的建议... - rolandvarga

6

你尝试过Go Playground吗?

关于Go Playground

Go Playground是运行在golang.org服务器上的Web服务。 该服务接收一个Go程序,编译、链接并在沙盒中运行该程序,然后返回输出结果。


5

GoSpeccy项目包含了一个内置的REPL,它是Go语言的一个受限子集。实现使用了goeval


4
不可以,但你可以利用编译速度的优势(如其他答案中提到的)。
看看使用生成 - 编译 - 运行循环来模拟 REPL 的rango。您还可以通过导入和语句启动它以开始交互式会话。

4

3
我在使用VSCode调试器时有些运气,但它的功能相对有限,因为您无法从调试控制台中调用函数调用Debug: Function Calls not supported #2225。基本上,您需要正确配置launch.json文件后设置断点。然后,您可以在左侧的变量侧栏中深入了解并输入变量表达式和调试控制台。 Debugging go file in VSCode to introspect through debugger

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接