Différentes façons de passer des chaînes comme arguments de la fonction go (golang)
Je lisais certains vont code et de dire quelques différentes façons de transmettre les canaux aller. Peut-être qu'ils sont les mêmes, mais je me demandais si il n'y a aucune différence puisque je ne pouvais pas trouver de la documentation en ligne:
1)
func serve(ch <-chan interface{}){ //do stuff }
2)
func serve(ch chan<- interface{}){ //do stuff }
3)
func serve(ch chan interface{}){ //do stuff }
4)
func server(ch *chan interface{}){ //do stuff}
Je me demandais quelle était la différence entre eux ont été et si elles étaient équivalentes façons de faire la même chose: passer d'un canal autour de différents goroutines.
NOTE: je suis conscient qu'il n'y a aucune raison de passer un pointeur sur un chan, la carte, ou une tranche ou d'une fonction de valeur, puisque ce sont tous les types de référence en interne qui contient un pointeur (à l'exception serait si vous souhaitez que le destinataire de l'appel pour changer le type de référence de l'en-tête). La seule raison pour laquelle j'ai fourni, il est pour l'exhaustivité (c'est à dire de vraiment fournir tous les cas un canal pourrait être tenté d'être passé en paramètre et à faire sur la question qui, espérons-le, les références de tous les moyens pour ce faire et les compare).
Vous devez vous connecter pour publier un commentaire.
Ceux-ci sont différents types de canaux. Voir http://golang.org/ref/spec#Channel_types . Pour le pointeur de trucs: Rare, mais peut être utile si vous souhaitez modifier le canal de l'intérieur de la fonction (n'a jamais vu ça dans la nature).
Je recommande toujours que la direction est passée partout où c'est possible, par exemple,
En incluant la flèche
<-chan
ouchan<-
, vous êtes la réalisation de trois choses:Ces raisons sont bonnes pour montrer le canal de fin à chaque fois que possible.
Votre troisième cas représente pas spécifiant la fin de la chaîne. Cela permet aux deux extrémités de la chaîne à être accessibles, ce qui sera corriger dans certains cas, mais dans d'autres cas, peut conduire à des erreurs accidentelles.
Le quatrième cas, le passage d'un pointeur à un canal, il est tout à fait inhabituel et peut-être un peu bizarre. Si vous vouliez changer le canal, il serait plus facile de l'inclure comme un paramètre de retour à la place.
La règle d'or: une Flèche indique si les données en (sortie) ou de sortir de la (entrée) channel. Pas de flèche est à usage général de canal.