Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menukar Sekeping Jenis Antara Muka kepada Yang Lain dalam Go?
Jenis Penukaran Slices yang Mengandungi Antara Muka Berbeza
Dalam Go, anda mungkin menghadapi senario di mana anda perlu melepasi sekeping satu antara muka kepada fungsi yang menjangkakan sepotong antara muka serasi yang berbeza. Pertimbangkan contoh berikut:
<code class="go">type A interface { Close() error Read(b []byte) (int, error) } type B interface { Close() error } type Impl struct {} // Implementation of interface A and B func (I Impl) Close() error {...} func (I Impl) Read(b []byte) (int, error) {...}</code>
Keserasian Antara Muka
Dalam contoh ini, antara muka A termasuk antara muka B, iaitu, setiap jenis yang melaksanakan A juga melaksanakan B. Sebagai hasilnya, pelaksanaan konkrit A, seperti Impl, memenuhi kedua-dua A dan B.
Melalui Nilai Individu
Jika kita cuba menghantar item individu merentas fungsi, ia berfungsi seperti yang dijangkakan:
<code class="go">im := &Impl{} single(im) // works</code>
Melalui Slices
Namun, apabila cuba menghantar kepingan, kami menghadapi ralat:
<code class="go">list := []A{t} slice(list) // FAILS!</code>
Ralatnya ialah: tidak boleh menggunakan senarai (jenis []A) sebagai jenis []io.Pembaca dalam hujah untuk menghiris
Penyelesaian
Untuk menyelesaikan isu ini, kita boleh buat kepingan baharu jenis antara muka yang diingini secara manual:
<code class="go">ioReaders := make([]io.Reader, len(list)) for i, v := range list { ioReaders[i] = v } slice(ioReaders) // now works</code>
Atas ialah kandungan terperinci Bagaimana untuk Menukar Sekeping Jenis Antara Muka kepada Yang Lain dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!