Maison > développement back-end > Golang > Pourquoi le package Go « time » utilise-t-il une fonction « startTimer » sans implémentation ?

Pourquoi le package Go « time » utilise-t-il une fonction « startTimer » sans implémentation ?

DDD
Libérer: 2024-12-18 17:21:10
original
189 Les gens l'ont consulté

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

Appel de fonction sans corps de fonction

Lorsque vous parcourez le code du package "time" pour examiner la fonction After(d Duration) <-chan Time, vous rencontre une particularité :

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
}
Copier après la connexion

La fonction startTimer ne semble pas avoir d'implémentation propre :

func startTimer(*runtimeTimer)
Copier après la connexion

Questions :

  1. Où est le code réel de startTimer ?
  2. Pourquoi y a-t-il une « méthode abstraite » ?
  3. Quelles raisons le développeur Go avait-il pour cela Conception ?

Réponses :

  1. Emplacement du code réel :

    Le le code de startTimer se trouve dans la routine d'assemblage suivante défini :

    //go:linkname startTimer time.startTimer
    // startTimer adds t to the timer heap.
    func startTimer(t *timer) {
        if raceenabled {
            racerelease(unsafe.Pointer(t))
        }
        addtimer(t)
    }
    Copier après la connexion
  2. Méthodes abstraites dans Go :

    Dans Go, les déclarations de fonction peuvent omettre le corps de la fonction. Ces déclarations spécifient uniquement la signature d'une fonction implémentée en dehors de Go, par ex. B. en tant que routine d'assemblage.

  3. Raisons de la conception :

    Tous les langages de programmation ne peuvent pas exprimer pleinement leur propre environnement d'exécution. Certaines parties du runtime Go et de la bibliothèque standard sont écrites en C, certaines parties en assembleur et d'autres en ".goc", un mélange peu documenté de Go et C.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal