背景
- 在看源码时,一些源码方法没有方法体,难道说明这些方法为空?例如:
time.Now
调用的now()
,time.Sleep
,reflect.makechan
// Provided by package runtime.
func now() (sec int64, nsec int32, mono int64)
func Sleep(d Duration)
func makechan(typ *rtype, size int) (ch unsafe.Pointer)
- 在写代码时,如果我们想使用别的包下没有导出的方法或者变量时,怎么操作
go:linkname 的用法
实际上,上述提到的三个没有方法体的方法,其实现都在 src/runtime
包下
- time.now timestub.go 文件中
//go:linkname time_now time.now
func time_now() (sec int64, nsec int32, mono int64)