1.项目目录如下:
tree
.
├── go.mod
├── inner
│ └── inner.go
├── main
├── main.go
└── outer
├── 1.s
└── outer.go
2. inner.go
(1)
这里必须要加注释:localname是私有方法名 ,后面是到link到的共有方法
//go:linkname localname [importpath.name]
(2)
这里也需要导入unsafe包
3. outer.go
(1)
outer 包下需要一个 1.s文件,不然会报一个错
# link/outer
outer\outer.go:8:6: missing function body
(2)
必须导入私有方法的包
4.main.go
这里的unsafe包必须导入
5.总结:
go linkname可以让私有的方法或者变量link到公有资源中,源码中有一些方法没有方法体,可能是采用这种办法。
6.易错点:
unsafe包和这段注释一起使用
//go:linkname localname [importpath.name]
可以在outer中写,也可以在inner中写,不能两个都写