本文非教程,主要是记录博主自己研究的过程.
自己动手开发一门编程语言是从大学选择计算机就有的梦想,奈何门槛太硬,准备到现在
倒是想把他写成教程,但是水太深,能力有限,哈哈.
虽然不是教程,但是也有一定的参考意义,可以学习下.
学习前的准备知识:
掌握JS,3天GO语言基本知识学习经验
<<自制编译器>><<编译原理与实践>>
博主是上面两门书读不下去了,没有代入感,想着有没有更好的教程,然后发现了GO语言设计与实践
这个教程,看着是那么回事,但是一动手发现坑太多,主要博主系统是Windows10 64位和教程用的linux不一样.
第一章踩了一天的坑,感觉不能白踩,写篇博客记录下来.
正文:
如果我们想调试GO的源代码,大概思路是 下载GO源代码->修改GO源代码->编译GO源代码->执行个测试文件查看效果.
1.下载GO源代码
去GO的官网下载GO源代码,源码下载,
其实官网给的是一个git地址,博主访问超时了,翻墙才下载成功,
可以不看官网直接按照下面地址下载就行
博主是下载到E盘goroot目录
git clone https://go.googlesource.com/go goroot
大概880M,
image.png2.修改GO源代码
我们就简单修改一下,检验下调试思路是不是通的
IDE打开goroot/src/fmt/print.go 这个文件
然后找到函数Println 在里面加一行'println("niu bi le")',println是内置方法,可以直接使用.
image.png
3.安装编译环境
Windows平台要用GCC编译GO源码,GCC还分32位和64位;
Windows的GCC软件是MINGW,比较古老
这里坑比较多哈,正常应该下载个MinGW就行了,但是这个软件太老了,博主下载64的MINGW,运行软件报错.报错the file has been downloiaded incorrectly
软件的问题,
image.png
光看这个软件的图标就知道多么old了!
最后去stackoverflow找到的方法,问题地址
参考这个方法
image.png
点进去方法提供的链接,其实就是去下载MINGW64离线包,
去官网下载MINGW64的是个壳子,运行后你还得勾选要哪些环境,离线包是全给你下载了比较大.
根据红框里的版本下载,别下错了.
博主把下载的离线包放在了C盘,记得复制目录
image.png
然后把该bin路径添加到PATH环境变量里.
这个时候重新打开控制台,输入gcc回车,如果提示没有找到输入文件,说明编译环境安装成功,如图
image.png
4.编译GO源码
命令行切换到src目录下,输入make.bat回车,linux输入make.bash
等待一会,如果执行结果最后一行是Installed commands in XXX/bin
说明执行成功!
博主是执行成功后在goroot/bin目录下生成了一个go.exe文件
5.执行测试文件
我们在生成编译后执行文件的目录下(博主的是goroot/bin),加个测试文件main.go
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
main.go正常只会打印输出Hello World,但是我们之前再GO Println函数源码加了一行println"niu bi le"
所以,如果编译源码成功,应该先输出"niu bi le"再输出"Hello World"
博主之前系统装过golang,如果直接执行go run main.go 则调用的是原来安装的go,只会输出hello world.
这里,我们把goroot/bin目录里的go.exe改个名字,比如改成go2.exe,然后把该bin路径加入系统path环境变量里.
image.png
红框是原来安装的go,绿框是本次教程新增的环境变量.
重新打开控制台,让环境变量生效,
在控制台输入go2回车,确认是否生效
然后在goroot/bin目录下执行go2 run main.go
image.png
如图所示,大功告成!
网友评论