Maison > développement back-end > Golang > Les interfaces Go peuvent-elles être implémentées avec des méthodes non exportées dans différents packages ?

Les interfaces Go peuvent-elles être implémentées avec des méthodes non exportées dans différents packages ?

Susan Sarandon
Libérer: 2024-12-10 06:18:10
original
161 Les gens l'ont consulté

Can Go Interfaces Be Implemented with Unexported Methods in Different Packages?

Implémentation d'interfaces avec des méthodes non exportées dans Go

Considérez une situation dans laquelle vous souhaitez définir une interface pour l'accès au système comptable tout en masquant des détails spécifiques d'implémentation . Vous avez l'intention de rendre les méthodes d'interface non exportées et de fournir des fonctions exportées dans le package de base qui appellent la même fonction à partir d'un adaptateur local. Cependant, le compilateur génère une erreur en raison de l'implémentation non exportée de la méthode.

Est-il possible d'implémenter une interface avec des méthodes non exportées dans un package différent ?

Réponse :

Une solution potentielle consiste à utiliser des champs de structure anonymes :

type Adapter struct {
    accounting.IAdapter
}
Copier après la connexion

Cependant, il est Il est essentiel de noter que cette approche ne permet pas de fournir votre propre implémentation des méthodes non exportées. En d'autres termes, vous ne pouvez pas remplacer l'implémentation de IAdapter.getInvoice() dans Adapter.

Approche alternative :

Si la dissimulation du système de comptabilité.Le type d'adaptateur des autres packages est souhaité, rendez le type non exporté et créez une fonction pour enregistrer l'adaptateur avec le package de comptabilité :

package accounting

type IAdapter interface {
    GetInvoice() error
}

---

package accountingsystem

type adapter struct {}

func (a adapter) GetInvoice() error {return nil}  

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

---

package main

func main() {
    accountingsystem.SetupAdapter()
}
Copier après la connexion

Cette approche résout le problème en encapsulant le type d'adaptateur non exporté dans le package de comptabilité, limitant ainsi son accessibilité à d'autres packages.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal