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!