Verschiedene Möglichkeiten zum übergeben von Kanälen, die als Argumente in der Funktion go (golang)
Las ich einige code gehen und sagen, ein paar verschiedene Möglichkeiten, um pass go-Kanäle. Vielleicht sind Sie das gleiche, aber ich Frage mich, ob es einen Unterschied, da ich nicht finden konnte, Dokumentation online:
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}
Ich Frage mich, was der Unterschied zwischen Ihnen waren und wenn waren Sie nur gleichwertige Möglichkeiten, das gleiche zu tun: übergeben wird ein Kanal rund um verschiedene goroutines.
HINWEIS: ich bin mir bewusst, dass es keinen Grund gibt, übergeben Sie einen Zeiger auf einen chan, Karte oder Scheibe, oder die Funktion Wert, da sind alle Referenz-Typen, die intern enthalten einen Zeiger (die Ausnahme würde sein, wenn Sie möchten, dass der angerufene zur änderung der Referenz-type-header). Der einzige Grund, warum ich, sofern es der Vollständigkeit halber (d.h., um wirklich jede Art und Weise ein Kanal, könnte versucht werden, die als parameter übergeben und um auf die Frage, hoffentlich, Referenzen alle Möglichkeiten, dies zu tun und vergleicht diese).
InformationsquelleAutor der Frage Charlie Parker | 2014-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese unterscheiden sich Arten der Kanäle. Sehen http://golang.org/ref/spec#Channel_types . Für die Zeiger-Zeug: Ungewöhnlich, aber möglicherweise nützlich, wenn Sie möchten, ändern Sie den Kanal aus dem inneren der Funktion (noch nie gesehen, dass in der wildnis).
InformationsquelleAutor der Antwort Volker
Empfehle ich immer, dass die Richtung übergeben wird, überall ist es möglich, z.B.
Indem Sie den Pfeil
<-chan
oderchan<-
erreicht drei Dinge:Dies sind gute Gründe, um zu zeigen, das Kanal-Ende, Wann immer möglich.
Ihrem Dritten Fall zeigt nicht Angabe das Ende des Kanals. Dadurch können beide enden des Kanals zugegriffen werden, das wird richtig sein, in einigen Fällen, aber in anderen Fällen kann es dazu führen zufällige Fehler.
Den vierten Fall, und übergeben Sie einen Zeiger auf einen Kanal, ist Recht ungewöhnlich und vielleicht ein wenig seltsam. Wenn Sie wollte, den Kanal zu ändern, wäre es übersichtlicher für Sie als return-parameter statt.
InformationsquelleAutor der Antwort Rick-777
Gilt die Faustregel: Pfeil zeigt an, ob die Daten in den (output) oder geht aus (Eingangs -) Kanal. Kein Pfeil ist Allzweck-Kanal.
InformationsquelleAutor der Antwort smishra