Rumah >pembangunan bahagian belakang >Golang >Mengapakah Fungsi Tanpa Nama dalam Gelung `for` Go Menangkap Nilai Akhir Pembolehubah Gelung?
Fungsi Tanpa Nama dalam untuk Gelung: Gelagat Tidak Dijangka
Dalam program Go anda, anda telah mendapati bahawa penjadual anda tidak mencetak output yang dijangkakan untuk setiap kerja yang dijadualkan. Masalahnya dikaitkan dengan penggunaan fungsi tanpa nama dalam gelung for.
Dalam gelung for, fungsi tanpa nama menangkap kerja pembolehubah gelung setiap kali gelung dilaksanakan. Walau bagaimanapun, oleh kerana hanya terdapat satu fungsi tanpa nama, ia menggunakan pembolehubah kerja daripada lelaran terakhir gelung. Ini menyebabkan semua kerja mencetak perihalan kerja terakhir.
Penyelesaian: Cipta Pembolehubah Baharu untuk Setiap Lelaran
Untuk menyelesaikan isu ini, cipta pembolehubah baharu untuk setiap lelaran gelung. Ini akan memastikan bahawa setiap fungsi tanpa nama menangkap nilai unik pembolehubah gelungnya sendiri:
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!") }
Dengan pengubahsuaian ini, setiap fungsi tanpa nama akan mempunyai salinan pembolehubah tugasnya sendiri, mencetak perihalan tugas dengan betul ia mewakili.
Atas ialah kandungan terperinci Mengapakah Fungsi Tanpa Nama dalam Gelung `for` Go Menangkap Nilai Akhir Pembolehubah Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!