Heim > Artikel > Backend-Entwicklung > Können Go-Kanäle mehrere Datentypen verarbeiten?
Typ-agnostische Kanäle in Go
Frage:
Ist das in Go möglich? mehrere Datentypen über einen einzigen Kanal senden?
Beispiel:
Der folgende Code versucht, verschiedene Datentypen über einen Kanal zu senden: http://play.golang. org/p/7p2Bd6b0QT.
Antwort:
Ja, es ist möglich, typunabhängige Kanäle in Go zu erstellen. Um mehrere Typen über einen Kanal zu senden, verwenden Sie:
greet := make(chan pet)
Mit dieser Änderung können Sie jeden Typ senden, der die Pet-Schnittstelle implementiert.
Generische Daten senden:
Wenn Sie vollständig generische Daten senden müssen, erstellen Sie einen Kanal vom Typ Chan-Schnittstelle{} und verwenden Sie Reflektion, um die Art der empfangenen Daten zu bestimmen.
Beispiel:
ch := make(chan interface{}) go func() { select { case p := <-ch: fmt.Printf("Received a %q", reflect.TypeOf(p).Name()) } }() ch <- "this is it"
Verwenden eines Typschalters:
Alternativ zur Reflexion können Sie einen Typschalter mit einer Select-Anweisung wie dieser verwenden:
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) }
Das obige ist der detaillierte Inhalt vonKönnen Go-Kanäle mehrere Datentypen verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!