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!