您当前的位置:滚动 >  >> 正文
世界热议:go:linkname注释讲解,使用场景

时间:2023-05-30 08:29:39    来源:哔哩哔哩

读源码的时候我们经常会读着读着 就变成了一个函数没有实现 之后上面带着//go:linkname上面的函数;

为什么会有这种函数呢?首先我们看一个time包的函数:


(资料图片仅供参考)

time.runtimeNano()

查看它的源码:

//go:linkname localname [importpath.name]

使用[importpath.name]作为源代码中声明的localname的变量或函数。由于该指令可以破坏类型系统和包模块化。因此只有引用了 unsafe 包才可以使用。

因此我们直接看: runtime.nanotime函数:

到这里我们知道了,//go:linkname 它有一个很重要的作用:

就是执行一些需要很高性能,但是为了代码简洁,而直接使用了其他包的执行方法,因为这些方法大部分都是一些基础语言中函数实现,因此都集成到了runtime包中。

如果加入我们开发go性能遇到瓶颈,真的需要使用到汇编指令,这块还是需要知道的,如果真的对go汇编比较熟悉的确是一个很牛X的选择(前提是对汇编和机器指令了如指掌)。

视频内容大部分就是如何在go项目中使用到//go:linkname,举例子:

就上面的简单例子就可以使用到go:linkname了,go汇编这块后续我也准备出几期视频讲解一下,当然是从简单的开始讲,毕竟汇编不是那么简单的。

有什么疑问可以留言,谢谢

关键词: