Melaksanakan Antara Muka dengan Kaedah Tersembunyi
Apabila membangunkan sistem perakaunan, adalah wajar untuk menyembunyikan pelaksanaan tertentu antara muka daripada program utama untuk memastikan hanya satu sistem perakaunan yang aktif. Untuk mencapai matlamat ini, seseorang boleh mempertimbangkan untuk membuat kaedah antara muka tidak dieksport dan mencipta fungsi yang dieksport yang memanggil fungsi daripada penyesuai tempatan.
package accounting import "errors" type IAdapter interface { getInvoice() error } var adapter IAdapter func SetAdapter(a IAdapter) { adapter = a } func GetInvoice() error { if (adapter == nil) { return errors.New("No adapter set!") } return adapter.getInvoice() }
Walau bagaimanapun, pendekatan ini menghadapi ralat penyusunan kerana pengkompil tidak boleh mengakses getInvoice yang tidak dieksport. kaedah daripada pakej sistem perakaunan.
cannot use adapter (type accountingsystem.Adapter) as type accounting.IAdapter in argument to accounting.SetAdapter: accountingsystem.Adapter does not implement accounting.IAdapter (missing accounting.getInvoice method) have accountingsystem.getInvoice() error want accounting.getInvoice() error
Medan Struktur Tanpa Nama Pendekatan
Satu penyelesaian yang mungkin adalah menggunakan medan struct tanpa nama. Walaupun ini membenarkan sistem perakaunan.Penyesuai untuk memenuhi antara muka perakaunan.IAdapter, ia menghalang pengguna daripada menyediakan pelaksanaan mereka sendiri bagi kaedah yang tidak dieksport.
type Adapter struct { accounting.IAdapter }
Pendekatan Alternatif
Pendekatan yang lebih idiomatik ialah mencipta jenis penyesuai yang tidak dieksport dan menyediakan fungsi untuk mendaftarkan penyesuai dengan perakaunan pakej.
package accounting type IAdapter interface { GetInvoice() error } package accountingsystem type adapter struct {} func (a adapter) GetInvoice() error {return nil} func SetupAdapter() { accounting.SetAdapter(adapter{}) }
Dengan menggunakan pendekatan ini, jenis accountingsystem.adapter disembunyikan daripada program utama, dan sistem perakaunan boleh dimulakan dengan memanggil fungsi SetupAdapter.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kaedah Antara Muka Tersembunyi dengan Betul dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!