Maison développement back-end Golang Comment les interfaces sont-elles définies et implémentées en langage Go ?

Comment les interfaces sont-elles définies et implémentées en langage Go ?

Jun 10, 2023 pm 04:46 PM
接口 go语言 实现

Comment les interfaces sont-elles définies et implémentées en langage Go ?

Le langage Go est un langage de programmation moderne. Il est conçu pour être simple et facile à comprendre, et il est également efficace, rapide et fiable. En langage Go, l’interface est un concept très important. Grâce aux interfaces, nous pouvons définir une collection de méthodes, puis laisser d'autres types implémenter ces méthodes. Dans cet article, nous explorerons en profondeur la définition et l’implémentation des interfaces dans le langage Go.

1. Définition de l'interface

Dans Go, une interface est un ensemble de méthodes. Concrètement, l'interface contient plusieurs méthodes, dont chacune doit avoir une signature fixe. Ces méthodes peuvent être des méthodes vides ou avoir des codes d’implémentation spécifiques. L'ensemble de méthodes définies via l'interface est associé à l'implémentation de type spécifique et peut être utilisé pour implémenter le polymorphisme.

La façon de définir une interface est très simple, utilisez simplement la syntaxe suivante :

type 接口名 interface {
    方法1(参数列表) 返回值列表
    方法2(参数列表) 返回值列表
    ...
}
Copier après la connexion

Parmi eux, le nom de l'interface est le nom que nous spécifions pour l'interface, et la méthode 1, la méthode 2, etc. sont toutes des méthodes incluses dans l'interface.

Par exemple, nous définissons un gestionnaire d'interface, qui contient deux méthodes : Ajouter et Supprimer. Le code est le suivant :

type Manager interface {
    Add(name string) error
    Remove(name string) error
}
Copier après la connexion

Ici, nous définissons une interface Manager, qui contient les méthodes Add et Remove. Les deux méthodes acceptent un nom de paramètre de type chaîne et renvoient une valeur de type d'erreur.

2. Implémentation d'interfaces

Dans Go, n'importe quel type peut implémenter une interface. Les types ici peuvent être des structures, des types de données de base, des fonctions, etc. Tant qu'un type implémente toutes les méthodes définies par l'interface, alors le type peut être considéré comme implémentant l'interface.

L'implémentation de l'interface peut être effectuée n'importe où, c'est-à-dire qu'elle peut être effectuée dans le package actuel ou dans d'autres packages. Lorsqu'un type implémente une interface, il peut être utilisé dans le code de l'appelant sans se soucier du type spécifique.

Par exemple, nous pouvons définir un type MysqlManager pour implémenter l'interface Manager :

type MysqlManager struct {}

func (mm *MysqlManager) Add(name string) error {
    // Add logic handling here
    return nil
}
func (mm *MysqlManager) Remove(name string) error {
    // Remove logic handling here
    return nil
}
Copier après la connexion

Dans le code ci-dessus, nous définissons un type MysqlManager, qui implémente l'interface Manager, et implémente la logique d'ajout de données dans la méthode Add. la logique de suppression des données est implémentée dans la méthode Remove. De cette façon, nous pouvons utiliser le type MysqlManager au lieu de l'interface Manager et utiliser l'interface Manager dans le code de l'appelant.

Bien sûr, nous pouvons également définir un type RedisManager pour implémenter l'interface Manager :

type RedisManager struct {}

func (rm *RedisManager) Add(name string) error {
    // Add logic handling here
    return nil
}
func (rm *RedisManager) Remove(name string) error {
    // Remove logic handling here
    return nil
}
Copier après la connexion

Dans le code ci-dessus, nous avons défini un type RedisManager, qui implémente également l'interface Manager, et ajoute des données dans la méthode Add Logic. la logique de suppression des données est implémentée dans la méthode Remove. De cette façon, nous pouvons choisir d'utiliser différentes sources de données en fonction de différentes situations lors de leur utilisation réelle, sans nous soucier du type spécifique de source de données.

3. Conversion de type

Étant donné que l'interface n'est pas un type spécifique, il s'agit simplement d'un ensemble de méthodes, donc lorsque nous l'utilisons, nous devons effectuer une conversion de type. La conversion de type ici consiste à convertir le type qui implémente l'interface en type d'interface.

Dans Go, il existe deux formes de conversion de type : l'une est une conversion et l'autre est une assertion de type.

  1. Conversion de type forcée

Lorsque nous convertissons un type qui implémente une interface en type d'interface, nous pouvons utiliser la conversion de type forcée. Le format de syntaxe de cette méthode est le suivant :

var i interface{} = MysqlManager{}
mm := i.(Manager)
Copier après la connexion

Dans le code ci-dessus, nous définissons une variable i, son type est interface{}, puis lui attribuons une instance de MysqlManager. Ensuite, nous utilisons cast pour convertir i en variable mm du type d'interface Manager.

  1. Assertion de type

En plus de la conversion de type forcée, Go fournit également une autre méthode de conversion de type appelée assertion de type. Le format syntaxique de l'assertion de type est le suivant :

var i interface{} = MysqlManager{}
mm, ok := i.(Manager)
Copier après la connexion

Dans cet exemple, nous définissons une variable i, son type est interface{}, puis lui attribuons une instance de MysqlManager. Ensuite, nous utilisons des assertions de type pour essayer de convertir i en variable mm du type d'interface Manager, et utilisons la variable ok pour déterminer si la conversion a réussi. Si la conversion réussit, la valeur de ok est vraie, sinon elle est fausse.

4. Résumé

Dans cet article, nous avons une discussion approfondie de la définition et de la mise en œuvre des interfaces dans le langage Go. On peut voir que l'interface est un concept très important dans Go, qui peut être utilisé pour implémenter le polymorphisme. Dans Go, n'importe quel type peut implémenter une interface, à condition qu'il implémente toutes les méthodes définies par l'interface. Lorsqu'un type implémente une interface, il peut être utilisé dans le code de l'appelant sans se soucier du type spécifique. Lors de l'utilisation d'interfaces, nous devons effectuer une conversion de type, qui inclut la conversion et l'assertion de type.

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

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 ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Apr 02, 2025 pm 05:09 PM

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

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 ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Apr 02, 2025 pm 04:12 PM

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

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 ...

Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Apr 02, 2025 pm 12:57 PM

Deux façons de définir les structures dans le langage GO: la différence entre les mots clés VAR et le type. Lorsque vous définissez des structures, GO Language voit souvent deux façons d'écrire différentes: d'abord ...

Quelle est la différence entre une classe abstraite et une interface en PHP? Quelle est la différence entre une classe abstraite et une interface en PHP? Apr 08, 2025 am 12:08 AM

La principale différence entre une classe abstraite et une interface est qu'une classe abstraite peut contenir la mise en œuvre d'une méthode, tandis qu'une interface ne peut définir la signature d'une méthode. 1. La classe abstraite est définie à l'aide du mot-clé abstrait, qui peut contenir des méthodes abstraites et concrètes, adaptées pour fournir des implémentations par défaut et un code partagé. 2. L'interface est définie à l'aide du mot clé de l'interface, qui ne contient que des signatures de méthode, qui conviennent à la définition des normes comportementales et de l'héritage multiple.

See all articles