Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Membetulkan Isu Penutupan Apabila Menjadualkan Kerja dalam Gelung Untuk?

Bagaimana untuk Membetulkan Isu Penutupan Apabila Menjadualkan Kerja dalam Gelung Untuk?

Patricia Arquette
Lepaskan: 2024-11-24 19:25:13
asal
769 orang telah melayarinya

How to Fix Closure Issues When Scheduling Jobs in a For Loop?

Menyelesaikan Isu Penutupan dalam For Loops: Tidak Boleh Menetapkan Pembolehubah kepada Fungsi Tanpa Nama

Dalam konteks mencipta jadual tugas, anda menghadapi masalah di mana kerja berjadual mencetak perihalan kerja terakhir yang diulang dan bukannya kerja mereka sendiri. Isu ini berpunca daripada menggunakan fungsi tanpa nama dalam gelung for.

Cabaran timbul daripada fakta bahawa semua penutupan dalam gelung anda berkongsi pembolehubah yang sama (dalam kes anda, pembolehubah kerja). Semasa anda melalui gelung, pembolehubah telah ditimpa dengan data daripada kerja seterusnya.

Untuk menyelesaikan masalah ini, anda cuba menghantar pembolehubah tugas sebagai hujah kepada fungsi tanpa nama, tetapi anda menerima ralat kerana fungsi dengan parameter mempunyai jenis yang berbeza daripada yang tanpa parameter.

Penyelesaian yang disyorkan adalah untuk mencipta pembolehubah baharu (dalam kes anda, RealJob) untuk setiap lelaran gelung untuk mengekalkan unik rujukan kepada setiap pekerjaan. Dengan berbuat demikian, anda mengelakkan isu penutupan dan memastikan setiap kerja yang dijadualkan mencetak huraian sendiri yang betul.

Berikut ialah kod yang disemak:

for _, job := range config.Jobs {
    realJob := job // a new variable each time through the loop
    c.AddFunc("@every "+realJob.Interval, func() {
        DistributeJob(realJob)
    })
    log.Println("Job " + realJob.Name + " has been scheduled!")
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Isu Penutupan Apabila Menjadualkan Kerja dalam Gelung Untuk?. 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