Rumah > pembangunan bahagian belakang > Golang > Mengapa Pakej Go `time` Menggunakan Fungsi `startTimer` tanpa Pelaksanaan?

Mengapa Pakej Go `time` Menggunakan Fungsi `startTimer` tanpa Pelaksanaan?

DDD
Lepaskan: 2024-12-18 17:21:10
asal
299 orang telah melayarinya

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

Panggilan fungsi tanpa badan fungsi

Apabila menyemak imbas kod pakej "masa" untuk memeriksa fungsi Selepas(d Tempoh) <-chan Masa, anda menemui satu keanehan:

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
}
Salin selepas log masuk

Fungsi startTimer nampaknya tidak mempunyai pelaksanaan own:

func startTimer(*runtimeTimer)
Salin selepas log masuk

Soalan:

  1. Di manakah kod sebenar startTimer?
  2. Mengapa terdapat "Kaedah abstrak" ?
  3. Apakah sebab pembangun Go untuk perkara ini Reka bentuk?

Jawapan:

  1. Lokasi kod sebenar:

    The kod startTimer berada dalam rutin pemasangan berikut ditakrifkan:

    //go:linkname startTimer time.startTimer
    // startTimer adds t to the timer heap.
    func startTimer(t *timer) {
        if raceenabled {
            racerelease(unsafe.Pointer(t))
        }
        addtimer(t)
    }
    Salin selepas log masuk
  2. Kaedah abstrak dalam Go:

    Dalam Go, pengisytiharan fungsi boleh menghilangkan badan fungsi. Pengisytiharan ini hanya menyatakan tandatangan fungsi yang dilaksanakan di luar Go, mis. B. sebagai rutin pemasangan.

  3. Sebab reka bentuk:

    Bukan semua bahasa pengaturcaraan boleh menyatakan sepenuhnya masa jalan mereka sendiri. Sebahagian daripada masa jalanan Go dan pustaka standard ditulis dalam C, bahagian dalam pemasang dan lain-lain dalam ".goc", gabungan Go dan C yang tidak didokumenkan secara menyeluruh.

Atas ialah kandungan terperinci Mengapa Pakej Go `time` Menggunakan Fungsi `startTimer` tanpa Pelaksanaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan