Anonymous vs. Structs Kosong dalam Go
Dalam Go, wujud perbezaan antara struct tanpa nama dan struct kosong, yang boleh menyebabkan kekeliruan apabila bekerja dengan saluran.
Tanpa Nama Struct
Dalam kod anda, baris selesai <- struct{}{} menggunakan struct tanpa nama. Struktur tanpa nama ditakrifkan secara deklaratif dalam pernyataan, tanpa pengisytiharan jenis bernama. Dalam kes ini, struct tidak mempunyai medan dan berkesan kosong.
Mengapa Menggunakan Struktur Tanpa Nama dengan Saluran?
Menghantar atau menerima nilai pada saluran memerlukan antara muka selamat jenis. Dengan menggunakan struct tanpa nama, anda mencipta saluran dengan jenis chan struct yang dijangkakan{}. Ini membolehkan anda memberi isyarat maklumat tanpa memindahkan data.
Sebab anda memerlukan pendakap tambahan dalam selesai <- struct{}{} adalah kerana pengkompil menjangkakan ungkapan yang menilai kepada nilai jenis struct{}. Menghantar struct kosong{} akan mengakibatkan ralat sintaks.
Struct Kosong
Sementara itu, pengisytiharan seperti make(chan struct{}) mencipta bernama jenis struct, struct{}, yang mempunyai saiz sifar. Ia biasanya digunakan untuk tujuan isyarat apabila nilai sebenar yang dihantar atau diterima tidak relevan.
Keperluan untuk _ = julat langs { <-done }
Ini talian adalah penting untuk memastikan goroutine utama tidak keluar lebih awal. Ia menghalang sehingga semua goroutine pahlawan telah selesai. Tanpa garisan ini, goroutine utama akan keluar sebelum semua pahlawan berpeluang menerima isyarat mereka, membawa kepada keputusan yang salah.
Kelebihan Struktur Kosong
Atas ialah kandungan terperinci Struktur Tanpa Nama lwn. Kosong dalam Saluran Go: Bila Menggunakan Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!