读懂代码和验证猜想最快、最直接的方式,就是在关键位置加一句 fmt.Println 打印中间结果,阅读源码也不例外。因此开启源码阅读计划的第一步是:掌握如何修改标准库源码,并通过添加打印来调试。
选择版本
选版本时,我们既希望读到尽量新的实现(往往更完善),又希望相对稳定,避免被频繁的版本更新打断。
1.21 是一个折中的选择。若你使用 macOS 且当前不是该版本,可参考 管理 Go 版本,在阅读与调试前切换到 1.21。
开启调试
无论你是通过 Homebrew、官方安装包安装,还是本地已有多版本 Go,都可以用下面命令找到当前生效版本的源码目录:
go env GOROOT进入该目录后,打开 src/fmt/print.go,找到 func Println(a ...any) (n int, err error),在函数体内加一行你想输出的内容,例如:
func Println(a ...any) (n int, err error) {
println("hello world")
return Fprintln(os.Stdout, a...)
}关键步骤:每次改完标准库后,需要进入 src 目录执行脚本重新编译工具链:
cd $GOROOT/src
./make.bashWindows 下请使用 make.bat。
编译完成后,在你自己的代码里调用 fmt.Println 即可验证修改。后续读源码时,任何想确认的变量或分支,都可以用这种「加打印」的方式快速验证。
调试结束后务必恢复对 print.go 的修改并重新执行 make.bash否则当前 Go 安装会被永久改写,影响所有使用该版本的项目。