Jupyter Notebook 统治了数据科学领域,但对于 Gopher 来说,缺乏优秀的交互式 Go 环境一直是种遗憾。今天推荐一款真正现代化的 Jupyter Go 内核——GoNB(Go Notebook),它带来了媲美 Python 的交互体验。

💡 为什么选择 GoNB?

GoNB 是一个全功能的 Jupyter 笔记本内核,相比早期项目带来了质的飞跃:

  • 原生兼容性:直接使用标准 Go 编译器,完美支持 CGO。
  • 高效编译执行:每个单元格独立编译。
  • IDE 体验:集成 gopls,实现代码自动补全。
  • 丰富可视化:支持输出 HTML、SVG 等,并支持自定义交互式 Widget。
  • 包管理:兼容 go.modgo.work 项目。

🛠 核心功能亮点

  1. %% 自动主函数:单元格顶部写上 %%,自动将代码封装进 main 函数。
  2. ! 执行 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
# 1. 安装 golang 编译器
wget https://go.dev/dl/go1.26.1.linux-amd64.tar.gz
tar -xzvf go1.26.1.linux-amd64.tar.gz -C /usr/local
# 2. 配置环境变量
cat >> ~/.bashrc <<-"EOF"
export GOROOT=/usr/local/go
export GOPATH=$HOME/.go
export PATH=$GOROOT/bin:$GOPATH:$PATH
EOF
source ~/.bashrc
# 3. 安装gonb
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

# 4. 假设已经安装好jupyter-lab等工具。
jupyter lab --ip=0.0.0.0

# 5. 如果使用 jupyterhub,那么需要手动指定环境变量
vim /home/jinzhongxu/.local/share/jupyter/kernels/gonb/kernel.json
# 更新里面的"env"

{"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 查看。