Jupyter Notebook 统治了数据科学领域,但对于 Gopher 来说,缺乏优秀的交互式 Go 环境一直是种遗憾。今天推荐一款真正现代化的 Jupyter Go 内核——GoNB(Go Notebook),它带来了媲美 Python 的交互体验。
💡 为什么选择 GoNB?
GoNB 是一个全功能的 Jupyter 笔记本内核,相比早期项目带来了质的飞跃:
- 原生兼容性:直接使用标准 Go 编译器,完美支持 CGO。
- 高效编译执行:每个单元格独立编译。
- IDE 体验:集成
gopls,实现代码自动补全。
- 丰富可视化:支持输出 HTML、SVG 等,并支持自定义交互式 Widget。
- 包管理:兼容
go.mod 和 go.work 项目。
🛠 核心功能亮点
%% 自动主函数:单元格顶部写上 %%,自动将代码封装进 main 函数。
! 执行 Shell 命令:直接在单元格内执行终端命令。
📦 快速上手
GoNB 原生支持 Linux 和 macOS,Windows 用户建议使用 WSL / Docker。Docker 的安装方式大家直接参考官网:https://github.com/janpfeifer/gonb/tree/main
这里介绍 Linux(Ubuntu22.04)上的安装方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| wget https://go.dev/dl/go1.26.1.linux-amd64.tar.gz tar -xzvf go1.26.1.linux-amd64.tar.gz -C /usr/local
cat >> ~/.bashrc <<-"EOF" export GOROOT=/usr/local/go export GOPATH=$HOME/.go export PATH=$GOROOT/bin:$GOPATH:$PATH EOF source ~/.bashrc
go install github.com/janpfeifer/gonb@latest && \ go install golang.org/x/tools/cmd/goimports@latest && \ go install golang.org/x/tools/gopls@latest
gonb --install
jupyter lab --ip=0.0.0.0
vim /home/jinzhongxu/.local/share/jupyter/kernels/gonb/kernel.json
{"argv":["/home/jinzhongxu/.go/bin/gonb","--kernel","{connection_file}","-vmodule=","-logtostderr=true","-a lsologtostderr=false","-log_file=","-log_dir=","-raw_error=false","-work=false","-comms_log=false","-stderr threshold=3","-v=0","-go_work="],"display_name":"Go (gonb)","language":"go","interrupt_mode":"message","env ":{"PATH":"/home/jinzhongxu/.go/bin:/usr/local/go/bin:/usr/local/TensorRT/bin:/usr/local/cuda/bin:/usr/local/java/bin:/usr/local/pandoc/bin:/usr/local/node-v17.8.0/bin:/usr/local/miniconda/bin:/usr/local/miniconda/condabin:/home/jinzhongxu/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/jinzhongxu/.local/bin","GOPATH":"/home/jinzhongxu/.go"}}
|
🚀 总结
GoNB 的出现填补了 Go 语言在 Jupyter 生态中的空白。更多使用技巧,可以在 https://github.com/janpfeifer/gonb/blob/main/examples/tutorial.ipynb 查看。