修改并重新编译1.17.5版本Go源码

GOROOT和GOPATH

GOROOT为Go语言的安装路径,里面包含Go语言的一些源码。
GOPATH为工作目录,目录中包括

  1. 编译后的二进制文件
  2. 下载的依赖包
  3. 项目源码路径

调试过程

  1. Windows环境下安装golang最新稳定版本
    下载go源码

  2. 修改源代码
    在Go/src/fmt/print中可以找到golang常用的打印函数Println,尝试修改该函数:
    修改源代码
    println是GO运行时内置的方法,不依赖任何包。

  3. 编译修改后的源代码
    运行src目录下的all.bat文件,发现报错

ERROR: Cannot find C:\Users\reysong\Go1.4\bin\go.exe
Set GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.

查阅资料后发现Go在1.5版本之后实现了自举,所以在1.5之前Go可以直接用GCC源码编译,要编译1.5及以后版本必须先编译一个1.4版本的Go,用编译好的Go去编译新版本的Go:

下载完之后解压,进入src目录运行all.bat文件,这次很顺利:
编译go源码
编译完之后在go1.4-bootstrap文件夹下多出了bin和pkg两个目录,这里面就是编译新版本Go源码需要用到的东西。
重新打开1.17.5版本go源码,修改go env:

set GOROOT_BOOTSTRAP=D:\go1.4-bootstrap

再运行all.bat后编译成功!
编译成功

查验结果

查验结果

参考文章