Maison > développement back-end > Golang > Comment puis-je créer des canaux indépendants du type dans Go ?

Comment puis-je créer des canaux indépendants du type dans Go ?

Barbara Streisand
Libérer: 2024-11-03 15:27:02
original
769 Les gens l'ont consulté

How Can I Create Type-Agnostic Channels in Go?

Type de canaux agnostiques dans Go

Les canaux dans Go offrent un moyen pratique de communiquer entre les goroutines. Par défaut, les canaux sont spécifiques à un type, ce qui signifie qu'ils ne peuvent transmettre que des valeurs d'un type particulier. Cependant, il est possible de créer des canaux indépendants du type pouvant gérer plusieurs types différents.

Considérons l'exemple suivant :

<code class="go">greet := make(chan pet)</code>
Copier après la connexion

Dans cet exemple, le canal d'accueil est indépendant du type. Il peut recevoir n’importe quel type implémentant l’interface pet. Cela permet aux goroutines d'envoyer différents types de valeurs sur le même canal.

Si vous souhaitez transmettre des valeurs d'un type complètement générique, vous pouvez utiliser une interface chan{}. Cependant, lorsque vous recevez des valeurs de ce type de canal, vous devrez utiliser la réflexion pour déterminer leur type réel.

Par exemple, le code suivant montre comment envoyer une valeur arbitraire sur un canal indépendant du type :

<code class="go">ch := make(chan interface{})

go func() {
    select {
    case p := <-ch:
        fmt.Printf("Received a %q", reflect.TypeOf(p).Name())
    }
}() 

ch <- "this is it"</code>
Copier après la connexion

Vous pouvez également utiliser un commutateur de type pour gérer les valeurs reçues avec plus d'élégance :

<code class="go">p := <-ch
switch p := p.(type) {
case string:
    fmt.Printf("Got a string %q", p)
default:
    fmt.Printf("Type of p is %T. Value %v", p, p)
}</code>
Copier après la connexion

En utilisant des canaux indépendants du type, vous pouvez augmenter la flexibilité et la réutilisabilité de votre code.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal