함수를 검사하기 위해 "time" 패키지의 코드를 탐색할 때 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 함수가 구현되지 않은 것 같습니다. own:
func startTimer(*runtimeTimer)
질문:
정답:
실제 코드 위치:
The startTimer의 코드는 다음 어셈블리 루틴에 있습니다. 정의됨:
//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 런타임 및 표준 라이브러리의 일부는 C로 작성되고, 일부는 어셈블러로 작성되며, 기타 일부는 Go와 C의 종합적으로 문서화되지 않은 혼합인 ".goc"로 작성됩니다.
위 내용은 Go `time` 패키지가 구현이 필요 없는 `startTimer` 함수를 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!