Что означает функция без тела?

Я читаю код, который имеет пакет 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

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). Части времени выполнения и стандартная библиотека находятся на C, части находятся в сборке, а некоторые другие находятся в .goc, что является нелогичным документированным гибридом Go и C.