最近幾年,Go 語言變得非常流行。我是 Python 的狂熱粉絲,三年前我的第一個業餘項目也是用 Python 實現的。而現在我開始使用 Go 語言來取代 Python,因為不管是業餘愛好的小項目還是公司裡的大項目,Go 語言能讓我的編碼效率更高。
與此同時,隨著機器學習和數據科學(data science)變得越來越重要,Python 也更加流行。在機器學習中首選 Python 有很多原因,其中一個原因是 Python 是為交互式代碼編寫和計算而設計的。另一個重要的原因是 Python 中有一個很好的交互式編程工具:Jupyter Notebook。
雖然我現在在許多以前使用 Python 的項目中使用 Go 語言,但我仍然需要使用 Python 進行機器學習研究和數據分析。Python 中的交互式編程和 Jupyter Notebook 的能力對我來說仍然非常有吸引力。我希望有一個真正有用的 Go 語言的 Jupyter 環境以及能夠驗證 Go 語言正確性的 Jupyter 內核。但現在還沒有這樣的項目,有些類似的項目已經終止。雖然其中有一些比較流行,但不適合實際使用,因為它們不支持類型安全、代碼取消、代碼完成、檢查或顯示非文本內容。
因此,我決定開發一個新的環境,從頭開始在 Jupyter Notebook 上交互式運行 Go 語言。在這,我向大家介紹我構建的軟體,以及像 Python 一樣交互式編寫和執行 Go 的新方法。
GitHub 上項目主頁
我向大家介紹的項目是 yunabe/lgo,一個用於 Go 語言的 Jupyter Notebook 內核以及交互式解釋器。詳情請看以下倉庫。
yunabe/lgo
在瀏覽器試一試
以下連結是 Go 語言的 Jupyter 線上運行環境:
mybinder.org
感謝 binder (mybinder.org), 你可以在你的瀏覽器上使用 binder 上的臨時 docker 容器嘗試 Go 語言的 Jupyter環境(lgo)。從上面的按鈕打開臨時的 Jupyter Notebook,享受交互式 Go 編程!
主要特點
像 Python 一樣編寫和運行 Go 程序。Jupyter Notebook 功能完全符合 Go 語言規範,同時 100% 兼容 Go 語言編譯器。擁有 Jupyter Notebook 一樣的代碼補全,檢查和代碼格式化。顯示圖像,HTML,JavaScript,SVG 等。控制臺上的交互式解釋器完全支持 goroutine 以及 channel
安裝
有兩種方法可以將 Go 語言的 Jupyter 環境安裝到你的計算機中。
使用預先構建的 Docker 鏡像源碼安裝(目前僅支持 Linux)如果您想在計算機上快速嘗試 Go 語言的 Jupyter環境,請先嘗試 Docker 版本。 如果你使用 Linux 並且想要將 Jupyter 環境與 Go 環境集成到你的計算機中,那麼你可以選擇源碼安裝。 由於使用了 -buildmode = shared 進行回歸,lgo 的代碼在 go1.10 中運行起來很慢。 在 go1.10 修正 bug 之前,請使用 go1.9 來嘗試 lgo 。 目前 lgo 在 go1.9 以及 go1.8 完美運行。
Windows 和 Mac 用戶,請使用 Docker 版本,因為 lgo 不支持 Windows 和 Mac。你可以在 Windows 或 Mac 上的 Docker 來運行 lgo。
使用
像平常一樣執行 jupyter notebook 命令來啟動 Jupyter Notebook。當你新建一份筆記時,請從菜單中選擇 Go (lgo)。一旦創建了一個新的筆記,你就可以像 Python 那樣交互式地編寫和執行程序。
在 lgo 中,你可以通過將光標移動到標識符和按 Shift-Tab 來顯示變量、函數和類型的相關文檔。您可以通過按 Tab 來補全代碼。如果要顯示非文本數據,你可以參考這個例子來使用 DataDisplayer 類型。
像控制臺的解釋器環境那樣使用
你同樣可以像使用解釋器那樣使用 lgo。在安裝完成後,運行指令 jupyter console --kernel lgo 即可。當然,在這種模式中你也可以使用 Tab or Ctrl-I 來實現代碼補全。
pyter console --kernelIn [1]: a, b := 3, 4In [2]: func sum(x, y int) int { : return x + y : }In [3]: import "fmt"In [4]: fmt.Sprintf("sum(%d, %d) = %d", a, b, sum(a, b))sum(3, 4) = 7與現有框架的比較
對於那些了解其他現有的 golang Jupyter 內核的人,這裡是與競爭對手的比較表。你可以閱讀 READNE.MD 中的這部分獲取更多細節。
了解更多
如果你想了解更多,請瀏覽本項目的主頁並閱讀 README.md 中的介紹。此外,你還可以通過這些示例筆記中了解更多 Go 語言的Jupyter環境的真正用途。盡情享受 Go 語言的交互式編程吧!
via: https://medium.com/@yunabe/interactive-go-programming-with-jupyter-93fbf089aff1
作者:Yu Watanabe 譯者:7Ethan 校對:polaris1119
本文由 GCTT 原創編譯,Go語言中文網 榮譽推出