我正在阅读该package的代码,time然后想知道其func After(d Duration) <-chan Time工作原理。
time
func After(d Duration) <-chan Time
我发现代码如下:
func After(d Duration) <-chan Time { return NewTimer(d).C } func NewTimer(d Duration) *Timer { c := make(chan Time, 1) t := &Timer{ C: c, r: runtimeTimer{ when: nano() + int64(d), f: sendTime, arg: c, }, } startTimer(&t.r) return t }
因此,我找到了startTimer- 的定义,因为它startTimer没有函数体,这很奇怪。
startTimer
func startTimer(*runtimeTimer)
我想知道:
谢谢!
1)函数定义在这里:
// startTimer adds t to the timer heap. //go:linkname startTimer time.startTimer func startTimer(t *timer) { if raceenabled { racerelease(unsafe.Pointer(t)) } addtimer(t) }
2)函数声明:
函数声明可以省略主体。这样的声明为Go外部实现的功能(例如汇编例程)提供了签名。
3)并非每种编程语言都可以完全表达自己的运行时(例如C可以)。Go运行时和标准库的某些部分在C中,部分在汇编中,而其他一些在中.goc,这是Go和C的没有充分记录的混合体。
.goc