修改并重新编译1.17.5版本Go源码
GOROOT和GOPATH
GOROOT为Go语言的安装路径,里面包含Go语言的一些源码。
GOPATH为工作目录,目录中包括
- 编译后的二进制文件
- 下载的依赖包
- 项目源码路径
调试过程
-
Windows环境下安装golang最新稳定版本
-
修改源代码
在Go/src/fmt/print中可以找到golang常用的打印函数Println,尝试修改该函数:
println是GO运行时内置的方法,不依赖任何包。 -
编译修改后的源代码
运行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文件,这次很顺利:
编译完之后在go1.4-bootstrap文件夹下多出了bin和pkg两个目录,这里面就是编译新版本Go源码需要用到的东西。
重新打开1.17.5版本go源码,修改go env:
set GOROOT_BOOTSTRAP=D:\go1.4-bootstrap
再运行all.bat后编译成功!