11
votes

Pourquoi le type de canal a-t-il un '<-'?

Ceci fonctionne. xxx

Cependant, cela ne le fait pas. xxx

Pourquoi ai-je besoin d'un <- dans ma déclaration de type pour une chaîne? Je pensais que <- était d'écrire ou de lire à partir d'une chaîne. Pourquoi apparaîtrait-il dans un type?

go

0 commentaires

3 Réponses :


19
votes

Les canaux

peuvent avoir un type indiquant si elle est réadaptée, écroyablement ou les deux.

indiquant une direction de canal est effectué avec

donc le dans fait partie du type, P>

chan   time.Time  //Would be a read/writable channel
chan<- time.Time  // Would be a write only channel
<-chan time.Time  // Would be a read only channel


1 commentaires

@ David-Faux, notez également que vous pouvez simplement utiliser cocher: = TIME.TICK (1E8) et le compilateur dérive le type correct pour cocher automatiquement. Cette approche réduit considérablement l'encombrement aussi.



4
votes

Un bon moyen de penser aux canaux est comme tuyaux avec deux extrémités forte>. Une extrémité est l'endroit où les événements circulent et l'autre où ils coulent. Ainsi, déclarant une chaîne, E.G.

func generate(c chan<- int) {
    ...
}


0 commentaires

0
votes

Bien que vous puissiez déclarer une variable de canal «en lecture seule» ou «écrire uniquement», il est inutile de le faire, car vous ne pouvez rien faire avec eux.

La syntaxe "en lecture seule" et "écrire uniquement" est pour les paramètres de fonction. Cette syntaxe ressemble davantage à "const" en C ou "dans" et "Out" dans Ada.

NOR Les canaux de go ont deux "extrémités". Les tuyaux Unix ont deux descripteurs de fichier, un pour chaque extrémité. La même variable de type de canal est utilisée à la fois pour la lecture et l'écriture.


0 commentaires