Table des matières
Qu'est-ce qu'une interface dans Go?
Comment implémenter une interface
Interface vide: interface{} (pre-go 1.18)
Tapez des assertions et des commutateurs de type
Meilleures pratiques et conseils
Exemple: utilisant des interfaces de style bibliothèque standard
Maison développement back-end Golang Comment définir et utiliser des interfaces à Golang?

Comment définir et utiliser des interfaces à Golang?

Aug 01, 2025 am 07:10 AM
interface golang 接口定义

Une interface dans GO est un type qui définit un ensemble de signatures de méthode, et tout type implémentant ces méthodes satisfait automatiquement l'interface sans déclaration explicite. 1. Définissez une interface avec des signatures de méthode, comme le haut-parleur avec la chaîne Speak (). 2. Implémentez l'interface en fournissant les méthodes sur n'importe quel type, telles que les structures de chien et de chat avec une méthode Speak (). 3. Utilisez des valeurs d'interface de manière interchangeable, comme indiqué avec une tranche de haut-parleur tenant à la fois le chien et le chat. 4. Utilisez n'importe quelle (ou interface {}) pour accepter tout type, mais appliquez des assertions de type ou des commutateurs de type pour récupérer le type sous-jacent en cas de besoin. 5. Suivez les meilleures pratiques: Gardez les interfaces petites, laissez-les émerger naturellement, utilisez n'importe quel avec parcimonie, préfèrent les récepteurs de valeur et tirez parti des modèles de bibliothèque standard comme io.writer. Les interfaces dans GO favorisent le polymorphisme, la flexibilité et la conception propre en se concentrant sur le comportement plutôt que sur la mise en œuvre, en rendant le code composable, réutilisable et testable.

Comment définir et utiliser des interfaces à Golang?

Dans GO, les interfaces sont un moyen puissant d'atteindre le polymorphisme et le code de découple. Ils vous permettent de définir le comportement sans spécifier l'implémentation, ce qui rend votre code plus flexible et réutilisable.

Comment définir et utiliser des interfaces à Golang?

Qu'est-ce qu'une interface dans Go?

Une interface est un type qui spécifie un ensemble de signatures de méthode. Tout type qui implémente toutes les méthodes de l'interface le satisfait automatiquement - il n'est pas nécessaire de le déclarer explicitement. Ceci est connu sous le nom d'implémentation implicite .

Voici comment vous définissez une interface de base:

Comment définir et utiliser des interfaces à Golang?
 Tapez l'interface du haut-parleur {
    String Speak ()
}

Cette interface Speaker nécessite que tout type d'implémentation ait une méthode Speak() qui renvoie une chaîne.


Comment implémenter une interface

Tout type (comme une structure) peut implémenter l'interface en fournissant les méthodes requises.

Comment définir et utiliser des interfaces à Golang?
 Type Dog Struct {
    Chaîne de noms
}

func (d chien) dispens () String {
    retourne "woof! je suis".
}

Type Cat Struct {
    Chaîne de noms
}

func (c cat) disppe () string {
    Retour "Meow! I'm" C.Name
}

Désormais, Dog et Cat satisfont l'interface Speaker car ils ont une méthode Speak() string .

Vous pouvez les utiliser de manière interchangeable:

 func main () {
    Animaux: = [] Président {chien {nom: "Buddy"}, chat {nom: "Whiskers"}}

    pour _, animal: = gamme animaux {
        fmt.println (animal.speak ())
    }
}

Sortir:

 Trame! Je suis mon pote
Miaou! Je suis des moustaches

Remarque: L'attribution à Speaker fonctionne car GO vérifie au moment de la compilation si les types implémentent les méthodes requises.


Interface vide: interface{} (pre-go 1.18)

Avant GO 1.18, l'interface vide a été écrite sous forme interface{} et pourrait conserver n'importe quelle valeur car elle n'a pas de méthodes:

 var x interface {} = "Bonjour"
interface var y {} = 42

À partir de Go 1.18, vous pouvez any utiliser comme un alias plus lisible:

 var x any = "bonjour"

Les deux interface{} et any qui signifie la même chose.

Utile pour les fonctions qui acceptent tout type:

 func print (v any) {
    fmt.println (v)
}

Mais n'oubliez pas: vous aurez probablement besoin de types de type assertions ou de commutateurs de type pour récupérer la valeur sous-jacente.


Tapez des assertions et des commutateurs de type

Étant donné que les interfaces masquent les types de béton, vous devrez peut-être extraire le type d'origine.

Affirmation de type :

 Si chien, ok: = animal. (chien); d'accord {
    fmt.println ("a trouvé un chien:", dog.name)
}

Interrupteur de type :

 commutateur v: = animal. (type) {
Chien de cas:
    fmt.println ("c'est un chien:", v.name)
Case Cat:
    fmt.println ("c'est un chat:", v.name)
défaut:
    fmt.println ("animal inconnu")
}

Cela est particulièrement utile lors de la gestion des différents comportements en fonction du type réel.


Meilleures pratiques et conseils

  • Gardez les interfaces petites : Go Favors petites interfaces focalisées (comme io.Reader , io.Writer ).
  • Laissez les interfaces émerger naturellement : ne forcez pas les types à satisfaire les grandes interfaces. Définissez les interfaces si nécessaire, et non à l'avance.
  • Utilisez l'interface {} (ou tout) avec parcimonie : il perd la sécurité de type. Les génériques (introduits dans GO 1.18) sont souvent un meilleur choix.
  • Préférez les récepteurs de valeur sauf si la mutation est nécessaire : les types de récepteurs cohérents aident à éviter les décalages accidentels d'interface.

Exemple: utilisant des interfaces de style bibliothèque standard

La bibliothèque standard de GO utilise fortement ce modèle. Par exemple:

 Type d'interface d'écrivain {
    Écrire ([] octet) (n int, err error)
}

Vous pouvez écrire une fonction qui fonctionne avec n'importe quel écrivain:

 func saluer (w io.writer, nom de nom) {
    fmt.fprintf (w, "bonjour,% s! \ n", nom)
}

Maintenant, cela fonctionne avec les fichiers, les connexions réseau, les tampons, etc., tant qu'ils implémentent Write .


Fondamentalement, les interfaces dans GO concernent ce qu'un type peut faire , pas ce qu'il est. Vous les définissez par le comportement dont ils ont besoin et les types les satisfont automatiquement en mettant en œuvre les méthodes. Il garde les choses simples, composables et testables.

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

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)

Comment travaillez-vous avec les variables d'environnement à Golang? Comment travaillez-vous avec les variables d'environnement à Golang? Aug 19, 2025 pm 02:06 PM

Goprovidesbuilt-insupportforhandlinlinenvironmentVariblesviattheoSpackage, permettant à développer laderadead, set et manageenvironmentDataseCurely et entièrement.

Comment gérer les packages et les importations en Go? Comment gérer les packages et les importations en Go? Sep 01, 2025 am 02:10 AM

UsegomodulesbyrunninggomodinittrocereAgo.modfile, qui mentionne les dépenses et les versions.2. OrganizcodeIntopackages whereweachDirectoryisapackagewithaconsistpackagename, de préférence laMatchingTheDirectoryName, et lastructureImportSbaseTheMoDulepath.33.

Comment implémenter un cache LRU générique dans Go Comment implémenter un cache LRU générique dans Go Aug 18, 2025 am 08:31 AM

Utilisez GO Generics et Container / List pour réaliser le cache LRU en filetage; 2. Les composants principaux incluent des cartes, des listes liées bidirectionnelles et des verrous mutex; 3. Obtenir et ajouter les opérations assurer la sécurité de la concurrence à travers les verrous, avec une complexité temporelle d'O (1); 4. Lorsque le cache est plein, l'entrée inutilisée la plus longue sera automatiquement éliminée; 5. Dans l'exemple, le cache avec une capacité de 3 a réussi à éliminer le "B" le plus long inutilisé. Cette implémentation prend en charge entièrement générique, efficace et évolutif.

Comment créer une balise de construction personnalisée dans Go Comment créer une balise de construction personnalisée dans Go Aug 27, 2025 am 04:37 AM

CustomBuildTagSingoAllowConditionalCompilationBasedOnenvironment, Architecture, OrCustomScenariosByusing // Go: BuildTagsAtTheTopoffiles, qui aéréthénabledViagobuild-tags "Tagname", soutenant les opérateurs de type &&, ||, et! ForComplexCondidit

Comment gérer les paniques dans un goroutine à aller Comment gérer les paniques dans un goroutine à aller Aug 24, 2025 am 01:55 AM

Tohandlepanicsingoroutines, a utilisé avec cocoverités de manière

Comment utiliser Go avec Apache Kafka Comment utiliser Go avec Apache Kafka Aug 20, 2025 am 11:25 AM

La clé pour s'intégrer à Apachekafka avec GO est de sélectionner la bonne bibliothèque client et de configurer correctement les producteurs et les consommateurs. Tout d'abord, il est recommandé d'utiliser la bibliothèque Segmentio / Kafka-Go. Parce qu'il est concis et est conforme aux habitudes de langue GO, après l'installation via gogetgithub.com/segmentio/kafka-go, vous pouvez créer un écrivain pour envoyer des messages et définir des politiques addr, thème et équilibreur; Configurez ensuite le lecteur pour réaliser la consommation de messages en spécifiant les courtiers, le sujet et GroupID, prennent en charge les groupes de consommateurs et l'allocation de partition manuelle; Assurez-vous d'utiliser le contexte pour contrôler les délais d'expiration, activer TLS / SASL pour assurer la sécurité,

Comment convertir [] int en [] uint8 (tableau d'octet) dans Go Comment convertir [] int en [] uint8 (tableau d'octet) dans Go Sep 01, 2025 am 08:15 AM

Cet article explore comment convertir [] des tranches int en [] uint8 (tableau d'octets) dans Go. Étant donné que la taille du type INT dans GO est liée à la plate-forme (32 bits ou 64 bits), l'article détaille comment utiliser le package de réflexion pour obtenir la taille INT de manière dynamique et combiner le package de codage / binaire pour convertir efficacement et en toute sécurité de manière grande entidienne, en fournissant des exemples de code spécifiques et des précautions pour aider les développeurs à COPE avec des défis de conversion des données transversales.

GO Language Programmation simultanée: comprendre et utiliser Sync.WaitGroup GO Language Programmation simultanée: comprendre et utiliser Sync.WaitGroup Aug 31, 2025 am 07:48 AM

Sync.WaitGroup est un primitif important pour la synchronisation simultanée dans le langage Go. Il permet au Goroutine principal d'attendre l'exécution d'un groupe de sous-goroutines. Grâce au mécanisme de compteur, WaitGroup peut s'assurer que toutes les tâches simultanées sont effectuées et que le programme continue d'être exécuté, évitant efficacement les conditions de course et la fuite des ressources, et est un outil clé pour construire des applications simultanées robustes.

See all articles