Rumah >pembangunan bahagian belakang >Golang >Mengapa Go Goroutines Dilancarkan dalam Gelung Untuk dengan Fungsi Tanpa Nama Semua Mencetak Nilai Yang Sama?
Gelagat Tidak Dijangka Go Concurrency dengan for Gelung dan Fungsi Tanpa Nama
Dalam Go concurrency, adalah penting untuk memahami gelagat fungsi tanpa nama apabila dilancarkan sebagai goroutine. Ini ditunjukkan semasa cuba menggunakan penyegerakan.WaitGroup untuk menunggu berbilang gorouti untuk melengkapkan muat naik Amazon S3.
Kod awal menggunakan gelung for untuk melancarkan gorouti, tetapi output secara mengejutkan menunjukkan semua gorouti mencetak nilai yang sama ( 6). Ini berlaku kerana goroutine tidak dijadualkan sehingga selepas gelung for selesai, jadi nilai i ialah 6 apabila ia dilaksanakan.
Kod telah diubah suai untuk menghantar i sebagai hujah kepada fungsi tanpa nama, menghasilkan tingkah laku yang diingini. Ini kerana lulus i mencipta pembolehubah baharu dan menangkap nilai pada masa seruan.
Tingkah laku ini sejajar dengan Soalan Lazim Go, yang menyatakan bahawa apabila fungsi tanpa nama dilancarkan sebagai goroutine, ia menangkap keadaan pembolehubah sekelilingnya pada masa penciptaan. Melepasi i sebagai hujah dengan berkesan menyalin nilai pada masa itu.
Oleh itu, apabila menggunakan fungsi tanpa nama dalam goroutine, adalah penting untuk mempertimbangkan gelagat penutupan dan menggunakan teknik seperti hantaran nilai untuk mencapai gelagat serentak yang diingini.
Atas ialah kandungan terperinci Mengapa Go Goroutines Dilancarkan dalam Gelung Untuk dengan Fungsi Tanpa Nama Semua Mencetak Nilai Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!