Maison  >  Article  >  développement back-end  >  Le type de canal de Go est-il indépendant ?

Le type de canal de Go est-il indépendant ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-04 13:00:29565parcourir

Is Go's Channel Type Agnostic?

Tapez les canaux agnostiques dans Go

Question :

Plusieurs types de données distincts peuvent-ils être envoyés sur un seul canal générique dans Go ?

Réponse :

Oui, c'est possible. En utilisant un exemple fourni dans un lien de terrain de jeu, une chaîne peut être créée en utilisant la syntaxe suivante : greet: make(chan pet); ensuite, tout type qui implémente l'interface pet peut être envoyé de manière transparente via ce canal.

Pour obtenir un agnosticisme de type complet, un canal de type chan interface{} peut être utilisé. Lors de la réception d'une valeur d'un tel canal, la réflexion peut être utilisée pour déterminer son type.

Exemple :

Un exemple simplifié (bien que potentiellement non idiomatique) démontrant ce concept :

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

Exemple amélioré :

Une approche alternative suggérée par BurntSushi5 utilise un commutateur de type :

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

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