Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Kaedah Antara Muka Tersembunyi dengan Betul dalam Go?

Bagaimana untuk Melaksanakan Kaedah Antara Muka Tersembunyi dengan Betul dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-30 02:21:09397semak imbas

How to Properly Implement Hidden Interface Methods in Go?

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!

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