Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melaksanakan Antara Muka dengan Kaedah Tidak Dieksport dalam Pakej Go Berbeza?

Bagaimanakah Saya Boleh Melaksanakan Antara Muka dengan Kaedah Tidak Dieksport dalam Pakej Go Berbeza?

DDD
DDDasal
2024-11-29 17:00:12186semak imbas

How Can I Implement an Interface with Unexported Methods in a Different Go Package?

Melaksanakan Antara Muka dengan Kaedah Tidak Dieksport Merentasi Pakej

Anda cuba menyekat akses kepada butiran pelaksanaan antara muka dengan menjadikan kaedahnya tidak dieksport. Walaupun ini adalah pendekatan yang sah, ia boleh menimbulkan cabaran apabila melaksanakan antara muka dalam pakej yang berasingan.

Isunya

Pengkompil menimbulkan ralat kerana ia tidak dapat mengakses kaedah getInvoice yang tidak dieksport sistem perakaunan.Penyesuai. Ini disebabkan oleh peraturan keterlihatan bahasa Go, yang menghalang pakej daripada menggunakan pengecam yang tidak dieksport di luar skopnya sendiri.

Penyelesaian Kemungkinan

Malangnya, tiada cara langsung untuk melaksanakan antara muka dengan kaedah yang tidak dieksport dalam pakej lain. Walau bagaimanapun, terdapat kaedah alternatif untuk mencapai hasil yang serupa.

Menggunakan Medan Struktur Tanpa Nama

Anda boleh membenamkan antara muka sebagai medan tanpa nama dalam struct dalam pakej berasingan. Walaupun ini membenarkan struct untuk memenuhi antara muka, ia juga menjadikannya mustahil untuk menentukan pelaksanaan anda sendiri bagi kaedah yang tidak dieksport.

Mendaftarkan Penyesuai

Pendekatan yang lebih sesuai adalah untuk menjadikan jenis penyesuai tidak dieksport dan menyediakan fungsi dalam pakej penyesuai yang mendaftarkannya dengan pakej utama. Ini membolehkan anda mengawal akses kepada penyesuai sambil masih mengekalkan fleksibiliti.

// accountingsystem package
type adapter struct {}

// ... implementation omitted ...

func SetupAdapter() {
    accounting.SetAdapter(adapter{})
}

// main package
func main() {
    accountingsystem.SetupAdapter()
}

Dengan menggunakan kaedah ini, anda boleh menyekat akses kepada pelaksanaan penyesuai sambil memastikan antara muka boleh digunakan merentas pakej.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Antara Muka dengan Kaedah Tidak Dieksport dalam Pakej Go Berbeza?. 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