首頁  >  文章  >  後端開發  >  Go語言的類別IPython 互動式程式設計介面

Go語言的類別IPython 互動式程式設計介面

高洛峰
高洛峰原創
2016-11-23 09:27:331457瀏覽

Bret Victor 的 Inventing 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

重新建構容器的Image就好了。

雖然我們解決了自訂套件的問題,但是,這個編輯器還是太弱了,而且也缺乏IPython的分段式互動。有沒有更好的呢?

GopherNotes

Go語言的類別IPython 互動式程式設計介面

Jupyter的Notebook其實可以支援不同的語言內核, GopherNotes專案為Jupyter提供了Go語言的內核。

該專案受到已經不在維護的Gore (基於igo內核) 的啟發 。

Go語言的類別IPython 互動式程式設計介面

以上是我使用Gophernotes的一次測試,當我運行一個循環的時候,如果寫成一行,In[7],一切OK。到但是當我寫成三行後,In[8],就無法輸出正確的結果了。

後台給的誤差是:

FROM xiam/go-playground/unsafebox

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

ENTRYPOINT ["/go/bin/sandbox"]


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn