Go語言的類IPython 交互式編程界面

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/mypackage
RUN 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

我沒有搞明白爲什麼,報了個bug,如果有搞明白的小夥伴請告訴我。

至此,雖然沒有找到一個好用的,但是我對Gophernotes抱以很大的希望,希望它能夠早日解決一些基本的問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章