阅读go语言源代码1

前面大概说过bison与yacc的语法,那么其实go也是用bison来实现的,下面来说说怎么阅读go语言源代码。要看代码首先得找到代码的入口,怎么找呢?你可能首先想到grep main是的,一般来说这是一个没有争议的办法,但是对于go语言来说,这个办法对,也不对。怎么说呢?我们用gdb来进行debug就会看到所有的go语言程序的入口居然都在src/lib9/main.c里的main函数。

从go/include/libc.h中里我们可以看到这么一句

也就是说,在go语言源代码里main函数都重命名了,所有的函数入口都变成了src/lib9/mina.c,也实际的入口各自的代码里,因此说入口是各自的main这句话,对也不对。

 

那么先大概说一下go语言的代码结构

 

 

我们先来看一个go语言的hello world文件hello.go

那么这个文件要被编译链接成一个可执行文件,那么要执行如下命令:

 很显然最关键的就是6g和6l两个程序,那么我们就从6g开始

首先gdb -tui打开tui界面的gdb程序

然后输入file 6g载入6g程序,就可以看到

 /home/hoping/go/src/lib9/main.c,然后输入start后,step进入了/home/hoping/go/src/cmd/gc/lex.c的main函数

因此我们只需要看这个文件就大概可以看到程序的执行流程了。接下来暂时不需要gdb了,我们换vi和ctags。

在go目录执行ctags -R *来生成tag,然后用vi打开lex.c进入main函数,其实即使你看了这个函数也不会有太多收获。

正如我们前面说过的那样,6g是用bison的,那么显然我们需要找到bison文件和yylex函数即可。既然入口在gc文件夹,那么猜想y文件也在gc文件夹,于是进入ls *.y之后可以看到go.y。而go.y的输入全是由yylex函数来提供的。所以首先我们来看看yylex函数,在go文件夹下执行vim -t yylex,然后选择gc文件夹那个。

本文来自:CSDN博客

感谢作者:HopingWhite

查看原文:阅读go语言源代码1

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。