我正在阅读该程序包的代码,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的作者这样写
1 回答
FFIVE
TA贡献1797条经验 获得超6个赞
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的没有充分记录的混合体。
- 1 回答
- 0 关注
- 202 浏览
添加回答
举报
0/150
提交
取消