Maison >développement back-end >Golang >Les canaux Go peuvent-ils gérer plusieurs types de données ?

Les canaux Go peuvent-ils gérer plusieurs types de données ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 13:55:30287parcourir

Can Go Channels Handle Multiple Data Types?

Tapez les chaînes agnostiques dans Go

Question :

Dans Go, est-il possible de envoyer plusieurs types de données via un seul canal ?

Exemple :

Le code suivant tente d'envoyer différents types via un canal : http://play.golang. org/p/7p2Bd6b0QT.

Réponse :

Oui, il est possible de créer des chaînes indépendantes du type dans Go. Pour envoyer plusieurs types via un canal, utilisez :

greet := make(chan pet)

Avec cette modification, vous pouvez envoyer n'importe quel type qui implémente l'interface animal de compagnie.

Envoi de données génériques :

Si vous devez envoyer des données complètement génériques, créez un canal de type chan interface{} et utilisez la réflexion pour déterminer le type de données reçues.

Exemple :

ch := make(chan interface{})

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

ch <- "this is it"

Utilisation d'un commutateur de type :

Comme alternative à la réflexion, vous pouvez utiliser un commutateur de type avec une instruction select comme celle-ci :

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

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