2013-02-18 17 views
15

Czytam kod, że pakiet time, a następnie chcę wiedzieć, jak działa func After(d Duration) <-chan Time.Co oznacza funkcja bez ciała?

znalazłem kod następująco:

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 
} 

Więc znalazłem definicji startTimer - to takie dziwne, że funkcja startTimer nie posiada ciało funkcji.

func startTimer(*runtimeTimer) 

Chcę wiedzieć, że:

  1. Gdzie jest prawdziwy kodeks startTimer
  2. Dlaczego „metoda streszczenie” Czy istnieje tutaj
  3. Dlaczego autor idź napisał to tak

Dzięki!

Odpowiedz

22

1) funkcja definiuje 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) Function declarations:

Zgłoszenie funkcja może opuścić organizmu. Taka deklaracja zapewnia podpis dla funkcji zaimplementowanej poza Go, takiej jak procedura składania.

3) Nie każdy język programowania może w całości wyrażać własne środowisko uruchomieniowe (na przykład C). Części środowiska wykonawczego Go i biblioteki standardowej znajdują się w języku C, części są w zespole, a inne są w .goc, co jest niedoinformowaną hybrydą Go i C.

+0

@CheneyEah, zobacz [ten wątek] (http: //groups.google.com/group/golang-nuts/browse_thread/thread/134e72302b9a3441/d44169a540437357) po więcej informacji o plikach '.goc'. – kostix

+1

Link do funkcji startTimer() jest uszkodzony –