2013-02-18 8 views
15

Ich lese den Code, der Paket time, und dann möchte ich wissen, wie die func After(d Duration) <-chan Time funktioniert.Was bedeutet eine Funktion ohne Körper?

fand ich den Code folgt:

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 fand ich die Definition von startTimer - es ist so seltsam, dass Funktion startTimer keine Funktion Körper hat.

func startTimer(*runtimeTimer) 

Ich möchte, dass wissen:

  1. Wo ist der eigentliche Code der startTimer
  2. Warum eine „abstrakte Methode“ kann hier
  3. existiert Warum der Autor von Go es so schrieb

Vielen Dank!

Antwort

22

1) Die Funktion wird here definiert:

// 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) Function declarations:

Eine Funktionsdeklaration den Körper auslassen kann. Eine solche Deklaration stellt die Signatur für eine außerhalb von Go implementierte Funktion bereit, z. B. eine Assemblierungsroutine.

3) Nicht jede Programmiersprache kann ihre eigene Laufzeit vollständig ausdrücken (z. B. C). Teile der Go-Laufzeit und die Standardbibliothek sind in C, Teile sind in Assembly, während andere in .goc sind, was eine nicht gut dokumentierte Hybride von Go und C ist.

+0

@CheneyEah, siehe [this thread] (http: //groups.google.com/group/golang-nuts/browse_thread/thread/134e72302b9a3441/d44169a540437357) für weitere Informationen zu '.goc'-Dateien. – kostix

+1

startTimer() Funktion Declratioin Link ist gebrochen –

Verwandte Themen