我正在阅读打包的代码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
没有函数体。
func startTimer(*runtimeTimer)
我想知道:
- 真正的代码在哪里
startTimer
- 为什么这里可以存在“抽象方法”
- 为什么Go的作者这样写
Thanks!
-
函数已定义here https://golang.org/src/runtime/time.go#L206:
// startTimer adds t to the timer heap.
//go:linkname startTimer time.startTimer
func startTimer(t *timer) {
if raceenabled {
racerelease(unsafe.Pointer(t))
}
addtimer(t)
}
-
函数声明 http://golang.org/ref/spec#Function_declarations:
函数声明可以省略函数体。这样的声明提供了在 Go 外部实现的函数的签名,例如汇编例程。
-
并非每种编程语言都可以完全表达自己的运行时(例如,C 可以)。 Go 运行时和标准库的一部分是用 C 语言编写的,部分是用汇编语言编写的,而其他一些则是用 C 语言编写的。.goc
,这是一个没有详细记录的 Go 和 C 的混合体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)