Taip Saluran Agnostik dalam Go
Soalan:
Bolehkah berbilang jenis data berbeza dihantar melalui saluran generik tunggal dalam Go?
Jawapan:
Ya, boleh. Menggunakan contoh yang disediakan dalam pautan taman permainan, saluran boleh dibuat menggunakan sintaks berikut: greet: make(chan pet); kemudian, sebarang jenis yang melaksanakan antara muka haiwan peliharaan boleh dihantar dengan lancar melalui saluran ini.
Untuk mencapai agnostik jenis lengkap, saluran antara muka jenis chan{} boleh digunakan. Apabila menerima nilai daripada saluran sedemikian, refleksi boleh digunakan untuk menentukan jenisnya.
Contoh:
Contoh ringkas (walaupun mungkin bukan idiomatik) yang menunjukkan konsep ini :
<code class="go">ch := make(chan interface{}) go func() { select { case p := <-ch: fmt.Printf("Received a %q", reflect.TypeOf(p).Name()) } }() ch <- "this is it"</code>
Contoh yang Diperbaiki:
Pendekatan alternatif yang dicadangkan oleh BurntSushi5 menggunakan suis jenis:
<code class="go">p := <-ch switch p := p.(type) { case string: fmt.Printf("Got a string %q", p) default: fmt.Printf("Type of p is %T. Value %v", p, p) }</code>
Atas ialah kandungan terperinci Adakah Jenis Saluran Go Agnostik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!