Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Jenis Saluran Go Agnostik?

Adakah Jenis Saluran Go Agnostik?

Linda Hamilton
Linda Hamiltonasal
2024-11-04 13:00:29566semak imbas

Is Go's Channel Type Agnostic?

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!

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