Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mengembalikan Jenis Konkrit daripada Kaedah Antara Muka dalam Go?

Bagaimanakah Saya Boleh Mengembalikan Jenis Konkrit daripada Kaedah Antara Muka dalam Go?

DDD
DDDasal
2024-10-26 22:23:03805semak imbas

 How Can I Return a Concrete Type from an Interface Method in Go?

Kaedah Antara Muka Mengembalikan Antara Muka dan Jenis Konkrit

Dalam Go, kaedah antara muka yang mengembalikan antara muka menawarkan fleksibiliti untuk pelaksanaan jenis. Walau bagaimanapun, percubaan untuk melaksanakan kaedah sedemikian dengan jenis konkrit boleh membawa kepada ralat.

Pertimbangkan contoh:

<code class="go">func GetStringer() fmt.Stringer</code>

Di mana GetStringer ialah kaedah antara muka yang mengembalikan antara muka fmt.Stringer.

Jika jenis konkrit, seperti Foo, dilaksanakan untuk mengembalikan nilai dirinya (*Foo), ralat akan berlaku. Ini kerana Foo tidak melaksanakan fmt.Stringer secara langsung.

Untuk menyelesaikan isu ini, beberapa pendekatan boleh diambil:

Menggunakan Jenis Penyesuai

Buat jenis penyesuai yang membalut jenis konkrit dan mematuhi antara muka yang diperlukan:

<code class="go">type MyBar struct{ Bar }

func (b *MyBar) GetStringer() fmt.Stringer {
    return b.Bar.GetStringer()
}</code>

Pendekatan ini membenarkan sambungan tanpa mengubah suai Bar jenis asal.

Membalut dengan Antara Muka

Sebagai alternatif, jenis konkrit boleh dibalut terus dengan antara muka yang diperlukan:

<code class="go">func (b *Bar) GetStringer() fmt.Stringer {
    return &Foo{"foo"}
}</code>

Di sini, Bar jenis konkrit menyediakan pelaksanaan kaedah GetStringer yang mengembalikan contoh daripada jenis Foo, yang melaksanakan fmt.Stringer.

Kedua-dua kaedah menyediakan pilihan untuk menampung pulangan kaedah antara muka dengan jenis konkrit dalam Go. Pendekatan yang sesuai bergantung pada keperluan khusus dan seni bina kod.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengembalikan Jenis Konkrit daripada Kaedah Antara Muka dalam Go?. 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