Rumah >pembangunan bahagian belakang >Golang >Mengapa Mengukur Masa Pelaksanaan dengan Penangguhan Masuk Sentiasa Menghasilkan Sifar?

Mengapa Mengukur Masa Pelaksanaan dengan Penangguhan Masuk Sentiasa Menghasilkan Sifar?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-17 16:37:01419semak imbas

Why Does Measuring Execution Time with Defer in Go Always Yield Zero?

Mengukur Masa Pelaksanaan dalam Go: Menyelesaikan Misteri Tangguh

Tunda penyataan menunggu penyiapan fungsi sebelum melaksanakan fungsi yang berkaitan. Walau bagaimanapun, mencetak masa pelaksanaan fungsi berikut menggunakan penangguhan sentiasa menghasilkan sifar:

func sum() {
    start := time.Now()

    // Expected non-zero value, but always gets 0
    defer fmt.Println(time.Now().Sub(start))

    sum := 0
    for i := 1; i < 101; i++ {
        sum += i
    }
    time.Sleep(1 * time.Second)
    fmt.Println(sum)
}

Isu:
tunda menilai argumen fungsi tertunda apabila fungsi yang mengandungi menangguhkannya . Oleh itu, mula dinilai serta-merta, sebelum gelung atau tidur.

Penyelesaian:
Untuk mengukur masa berlalu dengan tepat, nilai masa.Now() di dalam fungsi tertunda:

defer func() { fmt.Println(time.Now().Sub(start)) }()

Dengan berbuat demikian, perbezaan masa dikira apabila fungsi tertunda dilaksanakan, memastikan ketepatan hasil.

Petua: Pertimbangkan untuk menggunakan fungsi boleh guna semula untuk merangkum logik pemasaan untuk pengukuran yang lebih mudah dan konsisten.

Atas ialah kandungan terperinci Mengapa Mengukur Masa Pelaksanaan dengan Penangguhan Masuk Sentiasa Menghasilkan Sifar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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