當瀏覽「time」套件的程式碼來檢查函數After(d Duration)
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函數似乎沒有實現自己的:
func startTimer(*runtimeTimer)
問題:
答案:
實際程式碼位置:
實際程式碼位置://go:linkname startTimer time.startTimer // startTimer adds t to the timer heap. func startTimer(t *timer) { if raceenabled { racerelease(unsafe.Pointer(t)) } addtimer(t) }
Go 中的抽象方法:
Go 中,函數宣告可以省略函數體。這些聲明僅指定在 Go 外部實作的函數的簽名,例如B. 作為彙編例程。
設計原因:以上是為什麼 Go `time` 套件使用無實作的 `startTimer` 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!