Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Penyata Penangguhan Saya Tidak Menghasilkan Harga Tiket Jangkaan dalam Go?

Mengapa Penyata Penangguhan Saya Tidak Menghasilkan Harga Tiket Jangkaan dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-30 18:30:18366semak imbas

Why Does My Defer Statement Not Produce the Expected Ticket Price in Go?

Cara menangguhkan Kata Kunci Berfungsi dalam Go

Dalam Go, kata kunci tangguh membolehkan anda menangguhkan pelaksanaan fungsi atau pernyataan sehingga sekeliling fungsi kembali. Walau bagaimanapun, nilai dan parameter fungsi tertunda dinilai serta-merta dan terikat pada panggilan fungsi pada masa penyata penangguhan.

Memahami Perintah Penilaian Tangguh

Contohnya, kod berikut:

defer fmt.Println("Your age is:", getAge(age))

menangguhkan pelaksanaan fungsi fmt.Println dan mengikat nilai umur pada masa penyata tangguh. Walau bagaimanapun, panggilan fungsi fmt.Println sebenar akan dilaksanakan dalam susunan terbalik sejurus sebelum fungsi sekeliling kembali.

Permohonan dalam Pengiraan Harga Tiket

Dalam kes anda, anda ingin mengira harga tiket berdasarkan umur pengguna:

defer fmt.Println("Your ticket price is:", printTicket(age, ticketPrice))

Di sini, penyata penangguhan mengikat nilai umur dan harga tiket pada masa penyata penangguhan. Apabila fungsi utama kembali, printTicket akan dipanggil dengan nilai terikat umur dan ticketPrice. Walau bagaimanapun, kerana hanya pernyataan if untuk umur <= 13 sedang dilaksanakan, ia hanya mencetak 9.99.

Menyelesaikan Isu

Untuk menyelesaikan isu, pastikan bahawa semua syarat yang diperlukan dalam printTicket dinilai sebelum fungsi ditangguhkan. Berikut ialah versi yang diubah suai:

defer fmt.Println(*age)

if *age <= 13 {
    ticketPrice = 9.99
} else if *age > 13 && *age < 65 {
    ticketPrice = 19.99
} else if *age >= 65 {
    ticketPrice = 12.99
}
defer fmt.Println(ticketPrice)

Kini, kedua-dua fmt.Println(*umur) dan fmt.Println(harga tiket) akan ditangguhkan dan dilaksanakan dalam susunan terbalik, memaparkan umur dan harga tiket yang betul.

Atas ialah kandungan terperinci Mengapa Penyata Penangguhan Saya Tidak Menghasilkan Harga Tiket Jangkaan dalam Go?. 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