Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Kata Kunci Tangguh Go berfungsi dalam Perintah Pelaksanaan Fungsi?

Bagaimanakah Kata Kunci Tangguh Go berfungsi dalam Perintah Pelaksanaan Fungsi?

Susan Sarandon
Susan Sarandonasal
2024-10-29 20:32:031049semak imbas

How Does Go's Defer Keyword Work in Function Execution Order?

Memahami Fungsi Kata Kunci Tangguh Go

Apabila bekerja dengan Go, memahami gelagat kata kunci tangguh adalah penting. Kata kunci ini membolehkan pembangun menangguhkan pelaksanaan fungsi sehingga fungsi sekeliling kembali. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa nilai dan parameter fungsi dinilai apabila penyataan penangguhan dilaksanakan.

Contoh: Menilai Pesanan Tangguh

Untuk menggambarkan perkara ini, pertimbangkan perkara berikut kod:

<code class="go">package main

import "fmt"

func main() {
    defer having()(fun("with Go."))
    fmt.Print("some ") // evaluation order: 3
}

func having() func(string) {
    fmt.Print("Go ") // evaluation order: 1
    return funWithGo
}

func fun(msg string) string {
    fmt.Print("have ") // evaluation order: 2
    return msg
}

func funWithGo(msg string) {
    fmt.Println("fun", msg) // evaluation order: 4
}</code>

Dalam contoh ini, kod dilaksanakan dalam susunan berikut:

  1. mempunyai fungsi dinilai dan mengembalikan fungsi yang mengambil rentetan sebagai input (perintah penilaian : 1)
  2. fungsi yang menyeronokkan dinilai dengan "dengan Pergi." rentetan sebagai input (perintah penilaian: 2)
  3. fmt.Print("some ") dilaksanakan (perintah penilaian: 3)
  4. menunda panggilan funWithGo fungsi dengan hasil daripada fun (perintah penilaian: 4)

Menggunakan Prinsip Tangguh

Untuk menyelesaikan isu yang disebut dalam pertanyaan asal, kami boleh menggunakan kata kunci tangguh untuk mencetak harga tiket dengan betul berdasarkan pada umur yang dimasukkan. Di bawah ialah versi kod yang diubah suai:

<code class="go">package main

import "fmt"

func main() {
    age := 999
    defer fmt.Println("Your age is:", getAge(&age)) // defer printing the age
    defer fmt.Println("Your ticket price is:", getTicketPrice(age)) // defer printing the ticket price
}

func getTicketPrice(age int) float64 {
    // Calculate ticket price based on age
    // logic can be customized here
    fmt.Println("...order is 2...")
    switch {
    case age <= 13:
        return 9.99
    case age > 13 && age < 65:
        return 19.99
    default:
        return 12.99
    }
}

func getAge(age *int) int {
    fmt.Println("...order is 1...")
    fmt.Print("Enter age=")
    fmt.Scanln(age)
    return *age
}</code>

Dalam kod yang diubah suai ini, kami memanfaatkan kata kunci tangguh dengan betul untuk memastikan umur dan harga tiket dicetak selepas fungsi masing-masing telah dilaksanakan, menyelesaikan isu awal .

Atas ialah kandungan terperinci Bagaimanakah Kata Kunci Tangguh Go berfungsi dalam Perintah Pelaksanaan Fungsi?. 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