在学一门语言的过程中,如果不看中间代码和源码怎么能知晓这门语言调度器的调度过程呢?
今天我就来介绍一个用于看golang重点代码的小工具
GOSSAFUNC=hello go build hello.go
例如这么一个问题
首先我们在本地
创建一个hello.go
插入代码
package main
import "fmt"
func main() {
a := new(struct{})
b := new(struct{})
println(a, b, a == b)
c := new(struct{})
d := new(struct{})
fmt.Println(c, d, c == d)
}
他的运行结果会很出乎你的意料
只能说原因和调度逃逸有关
然后在目标所在目录敲下
GOSSAFUNC=hello go build hello.go
然后会在相应路径出现一个 ssa.html 文件
在浏览器打开就可以看到它从源码到二进制一步一步做的转换