Heim > Backend-Entwicklung > Golang > Warum verwendet das Go-Paket „time' eine implementiertungslose „startTimer'-Funktion?

Warum verwendet das Go-Paket „time' eine implementiertungslose „startTimer'-Funktion?

DDD
Freigeben: 2024-12-18 17:21:10
Original
188 Leute haben es durchsucht

Why Does the Go `time` Package Use an Implementation-less `startTimer` Function?

Funktionsaufruf ohne Funktionsrumpf

Beim Durchstöbern des Codes des Pakets "time" zur Untersuchung der Funktion After(d Duration) <-chan Time stößt man auf eine Besonderheit:

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
}
Nach dem Login kopieren

Die Funktion startTimer scheint keine Implementierung zu besitzen:

func startTimer(*runtimeTimer)
Nach dem Login kopieren

Fragen:

  1. Wo befindet sich der tatsächliche Code von startTimer?
  2. Warum gibt es hier eine "abstrakte Methode"?
  3. Welche Gründe hatte der Go-Entwickler für dieses Design?

Antworten:

  1. Fundort des tatsächlichen Codes:

    Der Code von startTimer ist in der folgenden Assembly-Routine definiert:

    //go:linkname startTimer time.startTimer
    // startTimer adds t to the timer heap.
    func startTimer(t *timer) {
        if raceenabled {
            racerelease(unsafe.Pointer(t))
        }
        addtimer(t)
    }
    Nach dem Login kopieren
  2. Abstrakte Methoden in Go:

    In Go können Funktionsdeklarationen den Funktionsrumpf weglassen. Diese Deklarationen geben nur die Signatur einer Funktion an, die außerhalb von Go implementiert wird, z. B. als Assembleroutine.

  3. Gründe für das Design:

    Nicht alle Programmiersprachen können ihre eigene Laufzeit vollständig ausdrücken. Teile der Go-Laufzeit und der Standardbibliothek sind in C, Teile in Assembler und andere in ".goc" geschrieben, einer nicht umfassend dokumentierten Mischung aus Go und C.

Das obige ist der detaillierte Inhalt vonWarum verwendet das Go-Paket „time' eine implementiertungslose „startTimer'-Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage