這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
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/unsafeboxRUN go get github.com/myuser/mypackageRUN go get github.com/otheruser/otherpackageENTRYPOINT ["/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抱以很大的希望,希望它能夠早日解決一些基本的問題。