I'm reading the code that package time
, and then I want to know how the func After(d Duration) <-chan Time
works.
I found the code follows:
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
}
So I found the definition of startTimer
- it's so weird that function startTimer
does not have a function body.
func startTimer(*runtimeTimer)
I want to know that :
- Where is the real code of
startTimer
- Why an "abstract method" can exists here
- Why the author of Go wrote it like this
Thanks!
1) The function is defined here:
2) Function declarations:
3) Not every programming language can express its own runtime entirely (C can, for example). Parts of the Go runtime and the standard library are in C, parts are in assembly while some other are in
.goc
, which is a not well documented hybrid of Go and C.