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],就無法輸出正確的結果了。
後臺給出的錯誤是:
我沒有搞明白爲什麼,報了個bug,如果有搞明白的小夥伴請告訴我。
至此,雖然沒有找到一個好用的,但是我對Gophernotes抱以很大的希望,希望它能夠早日解決一些基本的問題。