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
Barbara Streisandoriginal
2024-11-03 15:27:02769parcourir

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>

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>

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>

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!

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