综合
简单围观一下有趣的 //go: 指令
Posts on 煎é±0 次浏览
前言 如果你平时有翻看源码的习惯,你肯定会发现。咦,怎么有的方法上面总是写着 //go: 这类指令呢。他们到底是干嘛用的? 今天我们一同揭开他们的面纱,我将简单给你介绍一下,它们都负责些什么 go:linkname //go:linkname localname importpath.name 该指令指示编译器使用 importpath.name 作为源代码中声明为 localname 的变量或函数的目标文件符号名称。但是由于这个伪指令,可以破坏类型系统和包模块化。因此只有引用了 unsafe 包才可以使用 简单来讲,就是 importpath.name 是 localname 的符号别名,编译器实际上会调用 localname 。但前提是使用了 unsafe 包才能使用 案例 time/time.go ... func now() (sec int64, nsec int32, mono int64) runtime/timestub.
原文:https://eddycjy.com/posts/go/talk/2019-03-31-go-ins/