Что означает функция без тела?
Я читаю код, пакет 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)
}
объявление функции может опустить тело. Такое объявление предоставляет подпись для функции, реализованной вне Go, такой как процедура сборки.
3) Не каждый язык программирования может полностью выразить свою собственную среду выполнения (C может, например). Части среды выполнения Go и стандартной библиотеки находятся в C, части в сборке, в то время как некоторые другие находятся в .goc
, который является не хорошо документированным гибридом Go и C.