Maison >développement back-end >Golang >Les canaux Go peuvent-ils gérer plusieurs types de données ?
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!