Maison  >  Article  >  développement back-end  >  L'interface Golang ne peut pas être comprise

L'interface Golang ne peut pas être comprise

WBOY
WBOYoriginal
2023-05-10 15:03:07413parcourir

Golang (également connu sous le nom de Go) est un langage de programmation simultanée hautes performances, simple, puissant et sûr. Par rapport à d'autres langages, Golang présente de grands avantages dans la gestion des tâches gourmandes en E/S, des tâches à haute concurrence et de la programmation réseau. Parmi eux, l’interface est une fonctionnalité très importante de Golang. Pour les débutants, comprendre l’interface peut être l’une des choses les plus difficiles. Dans cet article, nous explorerons les bases et les concepts importants des interfaces Golang.

Tout d’abord, passons en revue la définition de l’interface. Dans Golang, une interface est un type qui n'est pas lié à un type de données spécifique comme d'autres langages, mais qui résume un ensemble commun de méthodes. Ces méthodes peuvent être utilisées pour décrire un ensemble de comportements similaires quel que soit le type de données spécifique. Cela rend l’interface très flexible et facile à étendre et à entretenir.

Regardons un exemple pratique ci-dessous. Supposons que nous ayons une interface représentant des formes, qui contient deux méthodes pour calculer l'aire et le périmètre :

type Shape interface {

Area() float64
Perimeter() float64

}

Maintenant, nous pouvons implémenter cette interface pour différents types de formes. Par exemple, le code d'implémentation d'un cercle peut être :

type Circle struct {

Radius float64

}

func (c Circle) Area() float64 {

return math.Pi * c.Radius * c.Radius

}

func (c Circle) Perimeter() float64 {

return 2 * math.Pi * c.Radius

}

Ici, nous définissons un cercle, qui a un attribut radius Radius. La méthode Area renvoie l'aire d'un cercle, tandis que la méthode Perimeter renvoie la circonférence d'un cercle. Ces deux méthodes doivent être implémentées respectivement sur le type Circle pour répondre aux exigences de l'interface Shape. De même, si nous avons une implémentation de type rectangle, nous pouvons également implémenter cette interface, le code est le suivant :

type Rectangle struct {

Width  float64
Height float64

}

func (r Rectangle) Area() float64 {

return r.Width * r.Height

}

func ( r Rectangle) Perimeter() float64 {

return 2 * (r.Width + r.Height)

}

Comme vous pouvez le voir, ce type de rectangle implémente également deux méthodes selon les exigences de l'interface Shape. Nous pouvons maintenant définir une tranche contenant différentes formes, puis parcourir cette tranche pour calculer leur aire et leur périmètre :

func TotalArea(shapes []Shape) float64 {

var area float64
for _, shape := range shapes {
    area += shape.Area()
}
return area

}

func TotalPerimeter(shapes []Shape) float64 {

var perimeter float64
for _, shape := range shapes {
    perimeter += shape.Perimeter()
}
return perimeter

}

De cette façon, nous pouvons calculer différents types de graphiques sans connaître leurs types spécifiques. Il s'agit d'un cas d'utilisation très utile pour les interfaces.

Cependant, pour les débutants, l'interface peut également ajouter quelques difficultés. Premièrement, l’interface elle-même n’a pas de type de données réel, elle décrit simplement un ensemble de méthodes. Par conséquent, nous ne pouvons pas utiliser directement les variables des types d’interface pour des opérations d’affectation ou de comparaison, et devons les convertir en types spécifiques. Par exemple, nous définissons une variable de type interface var s Shape, et nous devons la convertir en un type spécifique pour appeler sa méthode :

c := Circle{Radius: 2}
var s Shape = c
// La syntaxe suivante will Pour convertir s en type Circle, appelez la méthode Area
area := s.(Circle).Area()

Pendant la conversion, si le type réel de s n'est pas de type Circle, une exception de panique sera levée. Par conséquent, nous devons nous assurer que la conversion des types de variables d’interface est sûre.

De plus, les types d'interface dans Golang ne prennent pas en charge les génériques. Cela signifie que nous ne pouvons accepter aucun type de données directement via le type d'interface. Nous devons définir clairement le type d'interface spécifique en fonction de la définition de l'interface. Cela peut être gênant dans les scénarios dans lesquels les génériques sont souvent utilisés dans d'autres langages.

Pour résumer, les interfaces dans Golang sont une partie importante de son modèle de programmation. En définissant un ensemble commun de méthodes, vous pouvez fournir des interfaces cohérentes pour différents types, améliorant ainsi la flexibilité et la maintenabilité du programme. Cependant, les débutants peuvent rencontrer des difficultés pour comprendre le concept d'interface et utiliser les variables de type d'interface, et il leur faudra un certain temps pour les maîtriser.

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