Mengapa Boleh sync.WaitGroup Methods Dipanggil pada Nilai Daripada Penunjuk?
Walaupun penyegerakan.WaitGroup dokumentasi yang menunjukkan bahawa kaedahnya memerlukan *penerima sync.WaitGroup, adalah mungkin untuk memanggil kaedah ini pada nilai jenis sync.WaitGroup. Ini kerana semua kaedah penyegerakan.WaitGroup mempunyai penerima penunjuk, bermakna pengkompil akan menukar nilai secara automatik kepada penuding apabila kaedah dipanggil.
Set Kaedah Kosong bagi penyegerakan.WaitGroup
Set kaedah sebenar penyegerakan.WaitGroup kosong. Untuk mengesahkan ini, anda boleh menggunakan refleksi:
wg := sync.WaitGroup{} fmt.Println(reflect.TypeOf(wg).NumMethod()) // Output: 0
Oleh itu, kaedah yang kelihatan seperti ditakrifkan pada penyegerakan.Nilai WaitGroup sebenarnya adalah sebahagian daripada set kaedah *sync.WaitGroup.
Notasi Ringkas untuk Kaedah Penunjuk Panggilan pada Nilai
Apabila anda memanggil kaedah penunjuk pada nilai, pengkompil menterjemahkannya kepada panggilan pada penunjuk kepada nilai itu. Contohnya:
var wg sync.WaitGroup wg.Add(1)
Adalah bersamaan dengan:
(&wg).Add(1)
Spec for Go menyatakan bahawa jika pembolehubah boleh dialamatkan dan set kaedahnya mengandungi kaedah, memanggil kaedah itu terus pada pembolehubah ialah singkatan untuk memanggilnya pada penunjuk kepada pembolehubah itu.
Berkaitan Soalan
Untuk mendapatkan maklumat lanjut tentang topik ini, rujuk soalan berkaitan:
Atas ialah kandungan terperinci Mengapa Saya Boleh Panggil sync.WaitGroup Kaedah pada Nilai, Bukan Hanya Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!