Conteneurs génériques pour différents types d'exécution dans Go
Cet article aborde le défi de la transmission de données via un canal vers une goroutine qui traitera ensuite il, avec l'exigence que le canal gère tous les types. Nous étudions l'utilisation de génériques introduits dans Go 1.18 pour répondre à ce besoin.
Définition du conteneur générique
L'objectif est de créer un canal générique qui accepte tout type de données . Cependant, notre effort initial utilisant des génériques rencontre une erreur de compilation en raison de l'incapacité d'instancier le canal générique sans un type spécifique.
Utilisation de l'interface{} au lieu de génériques
Une solution potentielle consiste à remplacer les génériques par le type interface{}, qui peut contenir n'importe quelle valeur de données. Cependant, cette approche introduit de la complexité et des défis d'analyse lorsqu'il s'agit de structures imbriquées complexes.
Comprendre les génériques
Le problème vient d'une mauvaise compréhension de l'utilisation prévue des génériques dans ce contexte. Bien que nous puissions souhaiter un canal pouvant accepter n'importe quel type, cela n'est pas réalisable avec les canaux génériques.
Utilisation correcte des génériques
En général, lorsqu'il s'agit de génériques, nous définissons un type paramétré comme chan T et l'instancions avec un paramètre de type concret avant de l'utiliser. Par exemple, nous créerions un canal concret comme suit :
c := make(chan int)
Solution pour les types de données dynamiques
Pour gérer les variations de types de données d'exécution, nous pouvons utiliser un canal avec interface{} comme type :
c := make(chan interface{})
Dans ce cas, nous envoyons des données au canal et effectuons des assertions de type ou d'autres traitements pour gérer les différentes données types.
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!