Go语言的类IPython 交互式编程界面

Stella981
• 阅读 1203

Bret VictorInventing on principle 是我看到过的最令人激动和震撼的演示,没有之一。虽然这位前苹果公司的UI大牛早在2012年就作出的这次演示,但他的影响一直没有减弱,编写程序过程中的任何变化,应该直接的产生反馈,让程序猿能够看到结果,或者说创造者需要对自己的创造的东西有实时的反馈

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

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

官方版 Go Playground

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

Go语言的类IPython 交互式编程界面

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

Go语言的类IPython 交互式编程界面

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

然而go playground还有一些限制:

  • 不能import 用户定义的包
  • 编辑器弱,没有语法高亮,没有提示,没有undo ...
  • 没有Ipython那种分段式的交互

XIAM版Go Playground

Go语言的类IPython 交互式编程界面

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

  • 支持用户自定义的包
  • 支持unsafe sandbox,用户可以访问网络,文件系统等
  • 前端的容器化

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

FROM xiam/go-playground/unsafebox

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

ENTRYPOINT ["/go/bin/sandbox"]

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

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

GopherNotes

Go语言的类IPython 交互式编程界面

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

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

Go语言的类IPython 交互式编程界面

以上是我使用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

我没有搞明白为什么,报了个bug,如果有搞明白的小伙伴请告诉我。

至此,虽然没有找到一个好用的,但是我对Gophernotes抱以很大的希望,希望它能够早日解决一些基本的问题。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
Jenkins+Ansible+Gitlab自动化部署三剑客
JenkinsAnsibleGitlab自动化部署三剑客小中大showerlee2016031113:00Ansible(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.
Wesley13 Wesley13
2年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Easter79 Easter79
2年前
The Complete Guide To Rooting Any Android Phone
PhoneWhitsonGordon(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.lifehacker.com.au%2Fauthor%2Fwhitsongordon%2F)7April,20118:00AMShare(https://ww
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这