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
重新建構容器的Image就好了。 雖然我們解決了自訂套件的問題,但是,這個編輯器還是太弱了,而且也缺乏IPython的分段式互動。有沒有更好的呢? GopherNotes Jupyter的Notebook其實可以支援不同的語言內核, GopherNotes專案為Jupyter提供了Go語言的內核。 該專案受到已經不在維護的Gore (基於igo內核) 的啟發 。 以上是我使用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"]