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

Susan Sarandon
Lepaskan: 2024-10-30 18:30:18
asal
320 orang telah melayarinya

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

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

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!