go - etiqueta - body html definicion
¿Qué significa una función sin cuerpo? (1)
Estoy leyendo el código de ese paquete de time
, y luego quiero saber cómo func After(d Duration) <-chan Time
la func After(d Duration) <-chan Time
.
Encontré el siguiente código:
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
}
Así que encontré la definición de startTimer
- es tan raro que la función startTimer
no tiene un cuerpo de función.
func startTimer(*runtimeTimer)
Quiero saber eso :
- ¿Dónde está el código real de
startTimer
- ¿Por qué un "método abstracto" puede existir aquí?
- ¿Por qué el autor de Go lo escribió así?
¡Gracias!
1) La función se define here :
// 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) Declaraciones de funciones :
Una declaración de función puede omitir el cuerpo. Dicha declaración proporciona la firma para una función implementada fuera de Go, como una rutina de ensamblaje.
3) No todos los lenguajes de programación pueden expresar su propio tiempo de ejecución por completo (C puede, por ejemplo). Las partes del tiempo de ejecución de Go y la biblioteca estándar están en C, las piezas están en ensamblaje, mientras que otras están en .goc
, que es un híbrido no bien documentado de Go y C.