Rumah >pembangunan bahagian belakang >Golang >Mengapa Saya Boleh Panggil sync.WaitGroup Kaedah pada Nilai, Bukan Hanya Penunjuk?

Mengapa Saya Boleh Panggil sync.WaitGroup Kaedah pada Nilai, Bukan Hanya Penunjuk?

Barbara Streisand
Barbara Streisandasal
2024-12-16 07:44:09527semak imbas

Why Can I Call sync.WaitGroup Methods on Values, Not Just Pointers?

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:

  • [Memanggil kaedah dengan penerima penunjuk dengan objek dan bukannya penunjuk kepadanya? ](https://stackoverflow.com/questions/4239271)

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!

Kenyataan:
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