Kaedah Set penyegerakan.WaitGroup
Penyegerakan.WaitGroup ialah primitif penyegerakan yang membolehkan anda menunggu koleksi gorout selesai . Walaupun dokumentasinya mencadangkan bahawa kaedah Tambah, Selesai dan Tunggu memerlukan penerima penuding, anda juga boleh menggunakannya pada nilai bukan penuding. Bagaimanakah ini boleh berlaku?
Rahsianya terletak pada set kaedah penyegerakan kosong.WaitGroup. Ini bermakna semua kaedah penyegerakan.WaitGroup ialah penerima penunjuk. Apabila anda mencipta nilai jenis penyegerakan.WaitGroup, seperti:
var wg sync.WaitGroup
Anda sebenarnya sedang mencipta penuding kepada penyegerakan.WaitGroup struct. Penunjuk ini dinyahrujuk secara automatik apabila anda memanggil kaedah pada pembolehubah wg. Contohnya, kod berikut berjaya dikompilasi:
wg.Add(1) wg.Done() wg.Wait()
Pengkompil Go secara tersirat menukar wg kepada penuding untuk disegerakkan.WaitGroup sebelum memanggil kaedah. Tingkah laku ini ditakrifkan dalam spesifikasi bahasa Go:
Jika x boleh dialamatkan dan set kaedah &x mengandungi m, x.m() ialah singkatan untuk (&x).m().
Oleh itu, anda boleh memanggil kaedah yang mempunyai penerima penunjuk pada nilai bukan penunjuk jika nilai tersebut boleh ditangani. Nilai bukan penuding sentiasa boleh ditangani dalam Go.
Atas ialah kandungan terperinci Mengapa Boleh sync.WaitGroup Kaedah Dipanggil pada Nilai Bukan Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!