2017-12-15 2 views
-2

Mit Ich möchte eine Karte durch einen Kanal in gehen passieren:einen Kanal von Karten in go

func main() { 
    var pipe map[string]string 
    pipe = make(chan map[string]string, 2) 
    go connect("myhost", "100", pipe) 
    out := <-pipe 
...} 

, so dass der func() übergibt Antwort und Fehler durch den Kanal:

func connect(host string, url string, pipe chan<- map[string]string) { 
    fmt.Println("Trying "+url) 
    var lpipe map[string]string 
    lpipe = make(map[string]string) 
    lpipe["resp"], lpipe["err"] = "aaa","bbb" 
    pipe <- lpipe 
} 

Der Compiler lehnt beide

pipe = make(chan map[string]string, 2) 
:cannot use make(chan map[string]string, 2) (type chan map[string]string) as type map[string]string in assignment 

und

pipe = make(chan map, 2) 
:unexpected comma, expecting [ 

Was mache ich falsch? Das Ganze dient dazu, zu Goroutines parallelisiert zu werden.

Danke

Antwort

2

Die Fehlermeldung sagt Ihnen genau, was Sie tun, ist falsch: Sie versuchen, einen Wert vom Typ map[string]stringchan map[string]string auf eine Variable vom Typ zuzuordnen:

var pipe map[string]string 
pipe = make(chan map[string]string, 2) 

Hier können Sie Erstellen Sie eine Variable namens pipe vom Typ map[string]string, dann erstellen Sie in der zweiten Zeile einen Kanal (vom Typ chan map[string]string) und versuchen, ihn dieser Variablen zuzuweisen. Das funktioniert nicht.

Sie tun das gleiche in Ihrem zweiten Codebeispiel.

map[string]string und chan map[string]string sind unterschiedliche Typen.

+0

Danke und Entschuldigung für die zugegebenermaßen triviale Frage. – celestia

Verwandte Themen