一、统计代码命令
cloc 命令
```
cloc src
// 安装
npm install -g cloc # https://www.npmjs.com/package/cloc
sudo apt-get install cloc # Debian, Ubuntu
sudo yum install cloc # Red Hat, Fedora
sudo pacman -S cloc # Arch
sudo pkg install cloc # FreeBSD
sudo port install cloc # Mac OS X with MacPorts
```
定制方法
```
1. 导出默认支持语言类型相关配置到一个文件中,命令:
cloc.pl --write-lang-def=langs.txt
2. 参考其他语言的格式,修改langs.txt,添加所要统计语言源码文件的后缀名(这里参考了C语言):
re2c
filter remove_matches ^\s*//
filter call_regexp_common C
filter remove_inline //.*$
extension re
3. 使用新定义的语言文件langs.txt运行cloc:
cloc.pl --read-lang-def=langs.txt [源文件|目录]0
```
二、fmt.Println的实现
源码
```
func Println(a ...interface{}) (n int, err error) {
println("draven")
return Fprintln(os.Stdout, a...)
}
/*****结果*****
draven
Hello World
*/
```
println是Go语言运行时提供的内置方法
>cd src
>./make.bash
>如果遇到 make.bash must be run from $GOROOT/src, 则需要修改 GOROOT 指向项目源码目录即可, 再进入到src目录执行 make.bash. 编译成功后则在src目录下生成bin目录
三、中间代码
Go 语言的应用程序在运行之前需要先编译成二进制,在编译的过程中会经过中间代码生成阶段,Go 语言编译器的中间代码具有`静态单赋值`(Static Single Assignment、SSA)的特性
使用下面的命令将 Go 语言的源代码编译成汇编语言,然后通过汇编语言分析程序具体的执行过程:
```
go build -gcflags -S main.go
// 生成汇编语言,只为包 fmt 打印反汇编
// -gcflags 此标记用于指定需要传递给go tool compile命令的标记的列表
// -S 在当前的目录终端打印
```
>静态单赋值? (另起文章)
>go build 参数?(另起文章)
```
$ GOSSAFUNC=main go build main.go
//生成ass.html网页版分析
```