//go:linkname

用法://go:linkname localname//go:linkname localname importpath.name

这在 go 源码中经常见到。

//go:linkname 指令并不作用于于后面的 Go 代码。而是指示编译器使用 importpath.name 作为名为 localname变量或函数的文件符号名 (file symbol name)。即外部文件可以通过名字 importpath.name 引用 localname。 如果省略了 importpath.name 参数,importpath.name 默认是 localname

举个例子,sync.throw 实际上是由 sync_throw 函数实现的。通过 //go:linkname sync_throw sync.throw 生效。

使用这个指令之前必须要 import "unsafe"

详见 https://pkg.go.dev/cmd/compile