「GCTT 出品」與 Jupyter 交互的 Go 編程

2021-01-09 Go中國

最近幾年,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語言中文網 榮譽推出

相關焦點

  • 「GCTT 出品」Go 語言中的 Monkey 補丁
    如果你對 monkey 補丁是怎麼工作的不感興趣,你只是想使用它的話,你可以在這裡找到對應的庫文件讓我們看看一下代碼產生的彙編碼:packagemainfunca() int { return1 }funcmain() {print(a())}example1.go 由 GitHub 託管 查看源文件上述代碼應該用 go build -gcflags
  • 「GCTT 出品」Go 執行追蹤器(execution tracer)
    對於負載高的應用來說,就可能會生成一個比較大的文件,該文件後面可以通過 go tool trace 命令來進行解析。在執行追蹤器之前, Go 已經提供了 pprof 分析器可以用來分析內存和CPU,那麼問題來了,為什麼還要再添加這麼一個官方工具鏈?
  • jupyter最強插件你知道是誰嗎?
    jupyter lab插件沒有之一,因為它的核心功能就是幫助我們解決數據分析工作中非常重要的問題——「搭建工作流」。jupyter lab界面長啥樣(我使用的主題感興趣的朋友可以通過jupyter labextension install jupyterlab-tailwind-theme來安裝):
  • 只有想不到,「99」種擴展Jupyter功能的好方法
    在這篇文章中,作者介紹了能擴展 Jupyter 功能的各種方向,也許下一次需要時,就能真正「想到」這類擴展操作。當有人說:「你可以用 Jupyter 擴展解決這個問題」,他們可能沒有說清楚是什麼樣的擴展。Jupyter 生態系統是非常模塊化且具有擴展性的,所以有很多種擴展方式。這個博客希望能總結最常用的 Jupyter 擴展,並幫助你發掘生態系統中的新功能。
  • 答應我,用了這個jupyter插件,別再重複造輪子了
    答應我,用了這個jupyter插件,別再重複造輪子了 今天我們要介紹的這款jupyter lab插件,就可以幫助我們「記錄」、「歸類」、「存檔」以及「檢索」我們常用的代碼片段,大大提升工作效率,從而避免重複造輪子。
  • 答應我,用了這個jupyter插件,別再重複造輪子了
    而今天我們要介紹的這款jupyter lab插件,就可以幫助我們「記錄」、「歸類」、「存檔」以及「檢索」我們常用的代碼片段,大大提升工作效率,從而避免重複造輪子。lab插件為** jupyterlab-code-snippets**,使用下面的命令進行安裝:jupyter labextension install jupyterlab-code-snippets安裝完成後啟動jupyter lab,會發現側邊欄多了一個圖標:
  • 「GCTT 出品」關於結構化並發的筆記——Go 語言中有害的聲明語句
    大綱目錄到底什麼是 goto到底什麼是 gogoto 發生了什麼goto 抽象的毀滅者一個驚喜,移除 goto 語句帶來新的特性goto 語句:不再使用go 語句被認為有害go 語句:不再使用Nurseries: 一個替代 go 語句的構件Nurseries 支持函數抽象Nurseries 支持動態任務派發那有一個逃逸你可以定義一個像 nursery 的新類型不,事實上,
  • 『GCTT出品』通過 go/parser 理解 Go
    每種程式語言都有從 token 序列到語法樹結構的轉換規則。(nil), Unresolved:[]*ast.Ident(nil), Comments:[]*ast.CommentGroup(nil)}看起來可以了但是不易讀,可以使用 github.com/davecgh/go-spew/spew 來讓輸出更易讀:package mainimport ("go/parser""go/token""log""github.com/davecgh/
  • Jupyter Notebook 使用小技巧
    pip install <package> 」 在當前內核中安裝 package!在 shell 命令中使用 python 變量的方法是在前面加一個「$」符號:魔術命令魔術命令是大大擴展 notebook 功能的快捷方式。
  • 「GCTT 出品」在 go 中如何調用私有函數(綁定隱藏的標識符)
    在過去美好的日子,有 2 種實現方式,它們能繞過編譯器的檢查:不能引用未導出的名稱 pkg.symbol :舊的方式,現在已經不再使用 - 彙編級隱式連接到所需符號,稱為 assembly stubs ,詳見 go runtime, os/signal: use //go:linkname instead of assembly stubs to get access to
  • 不吹不黑,Jupyter Lab 3.0客觀使用體驗
    jupyter lab就安裝好了,版本為3.0.3:2.1 「無需nodejs即可安裝插件」作為官方宣傳的jupyter lab3.0版本後最大的改變,似乎我們可以不需要nodejs,不通過jupyter labextension install語句,僅僅依靠pip/conda/mamba就可以安裝拓展,那麼目前為止,常見常用的那些jupyter lab拓展都可以這樣安裝嗎?
  • 樹莓派打造python在線編程工具Jupyter Notebook
    樹莓派安裝docker以及簡單使用這次介紹一個python在線ide工具jupyter Notebook,也是用docker安裝的。安裝jupyter notebook,整體上還是很簡單的就是,就是設置密碼有一個小坑。
  • 學習使用Jupyter notebook
    Jupyter notebook是基於網頁用於交互計算的應用程式,可被用於全過程計算:開發、文檔編寫、運行代碼和展示結果。是以網頁的形式打開,可以在頁面中直接編寫和運行代碼,代碼的運行結果直接在代碼塊下顯示。特點:1.編程時具有語法高亮、縮進、tab補全的功能。
  • 人工智慧-Keras深度學習入門-mnist,編程環境Jupyter
    Jupyter以段落為主的編輯模式:啟動jupytertornado版本過高,如下圖為5.1.1,不支持jupyter notebook.notebook D:\g_learn\jupyter二、通過Jupter,來進行Keras環境檢查:新建一個python文件,命名為keras_evn,保存Python 版本檢查,輸入命令!
  • 『GCTT 出品』Go 系列教程 —— 35. 讀取文件
    文件讀取是所有程式語言中最常見的操作之一。本教程我們會學習如何使用 Go 讀取文件。本教程分為如下小節。將整個文件讀取到內存使用絕對文件路徑使用命令行標記來傳遞文件路徑將文件綁定在二進位文件中分塊讀取文件逐行讀取文件將整個文件讀取到內存將整個文件讀取到內存是最基本的文件操作之一。這需要使用 ioutil 包中的 ReadFile 函數。
  • 堅果R2 連接 TNT go 擴展本上手體驗:「用 TNT 2.0 辦公」終於不是...
    從後來一些媒體採訪得知,頭條當時收購堅果團隊正是看中了 TNT 系統,與大眾想的「它是禍根」剛好相反。兩年多之後,TNT 2.0 來了,還有專門為它打造的擴展本 TNT go,這次「用 TNT 辦公」還是笑話嗎?
  • jupyter notebook配置虛擬環境,解決python編程中程序包衝突
    圖4五、將環境寫入notebook的kernel中輸入以下語句:python -m ipykernel install --user --name pypaddle --display-name "pypaddle"六、打開jupyter
  • 教程| 新手指南:如何在AWS GPU上運行Jupyter noterbook?
    分步指南1 - 導航至 EC2 控制面板,並點擊「啟動實例」連結。2 -選擇官方 AWS 深度學習 Ubuntu AMI選擇「AWS 市場」並在搜索框中搜索「深度學習」。向下滾動,直到找到名為「深度學習 AMI Ubuntu 版本」的 AMI(如下圖),並選擇它。
  • 入門|始於Jupyter Notebooks:一份全面的初學者實用指南
    正如你將在本文中看到的那樣,這些筆記本非常靈活,能為數據科學家提供強大的交互能力和工具。它們甚至允許你運行 Python 之外的其它語言,比如 R、SQL 等。因為它們比單純的 IDE 平臺更具交互性,所以它們被廣泛用於以更具教學性的方式展示代碼。如何安裝 Jupyter Notebooks?你可能已經猜到了,你首先需要在你的機器上安裝 Python。
  • jupyter notebook在線平臺和教程
    python過程中,都聽過jupyter和jupyter notebook的大名,但默認的python安裝是不包含jupyter的,因此很多人還不了解jupyter是幹什麼用的?首先,jupyter是由jupyter project下的一個項目,我們可以簡單地把jupyter理解為一個可以在網頁運行python,julia語言,r語言的工具,它提出了文學化編程的概念,讓我們可以在單元格(cell)中,可以像寫在筆記本上文章一樣,隨時寫,隨時運行,隨時根據運行的結果來修改我們的代碼,這樣的交互式編程模式可以極大的提升我們編寫代碼的效率。