一尘不染

没有身体的功能是什么意思?

go

我正在阅读该package的代码,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)

我想知道:

  1. 真正的代码在哪里 startTimer
  2. 为什么这里可以存在“抽象方法”
  3. 为什么Go的作者这样写

谢谢!


阅读 290

收藏
2020-07-02

共1个答案

一尘不染

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的没有充分记录的混合体。

2020-07-02