视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Go语言的类IPython交互式编程界面
2020-11-27 14:17:13 责编:小采
文档
 Bret Victor 的 Inventing on principle 是我看到过的最令人激动和震撼的演示,没有之一。虽然这位前苹果公司的UI大牛早在2012年就作出的这次演示,但他的影响一直没有减弱,编写程序过程中的任何变化,应该直接的产生反馈,让程序猿能够看到结果,或者说创造者需要对自己的创造的东西有实时的反馈。

之前一直在使用Python,非常喜欢IPythonn Notebook,使用IPython Notenook来快速的完成一些原型非常的方便。现在由于项目的需要,要开始使用Go语言,我就在想,有没有可以使用Go的IPython环境呢?知乎上还有一个相关的帖子,可惜上面并没有给出有效的回答。

我做了些小功课,结果并不完美,这里分享给大家。

官方版 Go Playground

开始学习Go语言最好的资源就是官方的Tour了,大家可以一边学习,一边运行Go的示例程序,直接获得运行结果。完美体现Inventing on principle的理念。

这个Tour内嵌了一个Go的Playgound,大家可以在github上找到该项目的代码。

该项目包含一个前端和一个容器化的后台Sandbox,以保证程序运行的安全性。

然而go playground还有一些:

不能import 用户定义的包

编辑器弱,没有语法高亮,没有提示,没有undo ...

没有Ipython那种分段式的交互

XIAM版Go Playground

XIAM的go playground在官方的playground的基础上做了重大的改进。包括:

支持用户自定义的包

支持unsafe sandbox,用户可以访问网络,文件系统等

前端的容器化

想要使用自定义的包,需要修改相应sandbox的Dockerfile

FROM xiam/go-playground/unsafebox

RUN go get github.com/myuser/mypackageRUN go get github.com/otheruser/otherpackage

ENTRYPOINT ["/go/bin/sandbox"]

然后重新构建容器的Image就好了。

虽然我们解决了自定义包的问题,但是,这个编辑器还是太弱了,而且也缺乏IPython的分段式交互。有没有更好的呢?

GopherNotes

Jupyter的Notebook其实可以支持不同的语言内核, GopherNotes项目为Jupyter提供了Go语言的内核。

该项目受到已经不在维护的Gore (基于igo内核) 的启发 。

以上是我使用Gophernotes的一次测试,当我运行一个循环的时候,如果写成一行,In[7],一切OK。到但是当我写成三行后,In[8],就无法输出正确的结果了。

后台给出的错误是:

Error running goimports:
/tmp/979860191/func_proxy.go:4:4: expected declaration, found 'for'
[I 08:18:56.621 NotebookApp] Saving file at /Untitled.ipynb

下载本文
显示全文
专题