Maison développement back-end Golang implémentation par défaut de l'interface Golang

implémentation par défaut de l'interface Golang

May 10, 2023 am 10:07 AM

Afin de rendre le code plus flexible et évolutif, il est souvent nécessaire d'utiliser des interfaces pour le développement. Dans le langage Go, l'interface est une fonctionnalité de langage très puissante qui prend en charge plusieurs structures pour implémenter la même interface.

Cependant, dans le passé, le langage Go ne prenait pas en charge l'implémentation par défaut des interfaces, ce qui signifiait que lors de l'implémentation d'une interface, toutes les méthodes de l'interface devaient être implémentées. Lorsque vous devez hériter d'une interface, vous devez implémenter la même méthode encore et encore dans la sous-interface, ce qui entraîne un degré élevé de duplication de code et n'est pas propice à l'expansion et à la maintenance du code.

Afin de résoudre ce problème, à partir de la version 1.8 du langage Go, la prise en charge de l'implémentation par défaut de l'interface est fournie. Cette fonctionnalité nous permet de définir des implémentations par défaut des méthodes dans l'interface, de sorte que seules les méthodes nécessaires doivent être implémentées lors de l'implémentation de l'interface.

La syntaxe de l'implémentation par défaut de l'interface

La syntaxe de l'implémentation par défaut de l'interface est très simple Il vous suffit d'ajouter le mot-clé default avant l'implémentation de la méthode. Par exemple :

type Reader interface {

Read(p []byte) (n int, err error)
default Close() error {
    return nil
}
Copier après la connexion

}

Dans cet exemple, l'interface Reader définit la méthode Read et une implémentation par défaut de la méthode Close. Si l'interface Reader est implémentée mais que la méthode Close n'est pas implémentée, le système utilisera la méthode Close par défaut.

Il convient de noter que si une interface définit une méthode d'implémentation par défaut, il vous suffit alors d'implémenter la méthode autre que celle par défaut lors de l'implémentation de l'interface. Si vous souhaitez remplacer la méthode d'implémentation par défaut, vous pouvez définir une méthode du même nom dans la structure qui implémente l'interface pour remplacer l'implémentation par défaut.

Scénarios d'application pour l'implémentation par défaut de l'interface

Les scénarios d'utilisation pour l'implémentation par défaut de l'interface sont très larges. Ci-dessous, nous présenterons plusieurs scénarios d'application courants.

  1. Imbrication d'interface

En langage Go, l'imbrication d'interface est une technologie très courante. Les interfaces imbriquées peuvent rendre le code plus flexible et mieux organisé.

Supposons que nous ayons une interface qui doit lire et écrire des fichiers :

type FileReadWrite interface {

Read(p []byte) (n int, err error)
Write(p []byte) (n int, err error)
Copier après la connexion

}

Maintenant, nous définissons une interface qui doit fermer les fichiers :

type Closeable interface {

Close() error
Copier après la connexion

}

Si nous voulons définir une interface d'opération de fichier, y compris les méthodes de lecture, d'écriture et de fermeture de fichier, vous pouvez utiliser des interfaces imbriquées :

type FileOperation interface {

FileReadWrite
Closeable
Copier après la connexion

}

L'utilisation de l'implémentation par défaut peut éviter la duplication des implémentations lors de l'implémentation de FileOperation Interface Méthode de fermeture.

  1. Mise à niveau de la version de l'interface

Au cours du processus de développement, des mises à niveau de la version de l'interface sont souvent rencontrées. Lorsque nous devons ajouter des méthodes à une interface, si nous modifions directement l'interface d'origine, tout le code qui a implémenté l'interface devra être modifié.

En utilisant l'implémentation par défaut, nous pouvons ajouter de nouvelles méthodes à l'interface sans casser le code existant. Si vous devez utiliser une nouvelle méthode, vous pouvez remplacer la méthode d'implémentation par défaut dans la structure qui implémente l'interface.

  1. Modèle d'adaptateur d'interface

Le modèle d'adaptateur est un modèle de conception courant qui est utilisé pour convertir l'interface d'une classe en une autre interface afin de faciliter l'interaction entre les classes qui ne prennent pas en charge l'interface.

En langage Go, nous pouvons utiliser l'implémentation par défaut de l'interface pour implémenter rapidement le modèle d'adaptateur. Voici un exemple simple :

type USB interface {

Connect()
DataTransfer(data string) string
Copier après la connexion

}

type Adaptee struct {}

func (a *Adaptee) OldInterface() {

fmt.Println("support old interface")
Copier après la connexion

}

type Adapter interface {

USB
Copier après la connexion

}

type AdapterImpl struct {

Adaptee
Copier après la connexion

}

func (a *AdapterImpl) Connect() {

fmt.Println("connect USB")
Copier après la connexion

}

func (a *AdapterImpl) DataTransfer(data string) string {

fmt.Println("transfer data through USB")
a.OldInterface()  
return "Result"
Copier après la connexion

}

Dans cet exemple, nous avons défini une interface USB, et également défini une ancienne interface Adaptee pour démontrer l'utilisation de l'adaptateur. Afin de permettre à Adaptee d'utiliser l'interface USB, nous définissons un adaptateur qui implémente l'interface Adaptateur.

Connect et DataTransfer dans l'adaptateur utilisent l'implémentation par défaut. La méthode OldInterface d'Adaptee est appelée dans l'implémentation par défaut. De cette façon, nous pouvons utiliser un adaptateur pour convertir une classe qui ne prend pas en charge l'interface USB en une classe qui prend en charge l'interface USB.

Résumé

L'implémentation par défaut des interfaces en langage Go est une fonctionnalité du langage très pratique. Cela nous permet de définir les interfaces de manière plus flexible, tout en réduisant la duplication de code et en améliorant la qualité du code. Grâce à l'utilisation de l'implémentation par défaut de l'interface, nous pouvons plus facilement implémenter des modèles de conception tels que la réutilisation et le modèle d'adaptateur.

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les vulnérabilités de Debian OpenSSL Quelles sont les vulnérabilités de Debian OpenSSL Apr 02, 2025 am 07:30 AM

OpenSSL, en tant que bibliothèque open source largement utilisée dans les communications sécurisées, fournit des algorithmes de chiffrement, des clés et des fonctions de gestion des certificats. Cependant, il existe des vulnérabilités de sécurité connues dans sa version historique, dont certaines sont extrêmement nocives. Cet article se concentrera sur les vulnérabilités et les mesures de réponse communes pour OpenSSL dans Debian Systems. DebianopenSSL CONNUTS Vulnérabilités: OpenSSL a connu plusieurs vulnérabilités graves, telles que: la vulnérabilité des saignements cardiaques (CVE-2014-0160): cette vulnérabilité affecte OpenSSL 1.0.1 à 1.0.1F et 1.0.2 à 1.0.2 Versions bêta. Un attaquant peut utiliser cette vulnérabilité à des informations sensibles en lecture non autorisées sur le serveur, y compris les clés de chiffrement, etc.

Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Apr 02, 2025 pm 02:06 PM

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Apr 02, 2025 am 09:12 AM

Chemin d'apprentissage du backend: le parcours d'exploration du front-end à l'arrière-end en tant que débutant back-end qui se transforme du développement frontal, vous avez déjà la base de Nodejs, ...

Méthode de surveillance postgresql sous Debian Méthode de surveillance postgresql sous Debian Apr 02, 2025 am 07:27 AM

Cet article présente une variété de méthodes et d'outils pour surveiller les bases de données PostgreSQL sous le système Debian, vous aidant à saisir pleinement la surveillance des performances de la base de données. 1. Utilisez PostgreSQL pour reprendre la surveillance Afficher PostgreSQL lui-même offre plusieurs vues pour surveiller les activités de la base de données: PG_STAT_ACTIVITY: affiche les activités de la base de données en temps réel, y compris les connexions, les requêtes, les transactions et autres informations. PG_STAT_REPLIcation: surveille l'état de réplication, en particulier adapté aux grappes de réplication de flux. PG_STAT_DATABASE: Fournit des statistiques de base de données, telles que la taille de la base de données, les temps de validation / recul des transactions et d'autres indicateurs clés. 2. Utilisez l'outil d'analyse de journaux pgbadg

Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Apr 02, 2025 pm 02:03 PM

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Comment spécifier la base de données associée au modèle de Beego ORM? Comment spécifier la base de données associée au modèle de Beego ORM? Apr 02, 2025 pm 03:54 PM

Dans le cadre du cadre de beegoorm, comment spécifier la base de données associée au modèle? De nombreux projets Beego nécessitent que plusieurs bases de données soient opérées simultanément. Lorsque vous utilisez Beego ...

Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Apr 02, 2025 pm 04:54 PM

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

See all articles