go:linkname
//go:linkname localname importpath.name
localname函数实际调用importpath.name。
简单来讲,就是 importpath.name 是 localname 的符号别名,编译器实际上会调用 localname 。但前提是使用了 unsafe 包才能使用
go:noescape
//go:noescape
该指令指定下一个有声明但没有主体(意味着实现有可能不是 Go)的函数,不允许编译器对其做逃逸分析
一般情况下,该指令用于内存分配优化。因为编译器默认会进行逃逸分析,会通过规则判定一个变量是分配到堆上还是栈上。但凡事有意外,一些函数虽然逃逸分析其是存放到堆上。但是对于我们来说,它是特别的。我们就可以使用 go:noescape 指令强制要求编译器将其分配到函数栈上
go:nosplit
//go:nosplit
该指令指定文件中声明的下一个函数不得包含堆栈溢出检查。简单来讲,就是这个函数跳过堆栈溢出的检查。