Typunabhängige Kanäle in Go
Frage:
Können mehrere unterschiedliche Datentypen gesendet werden? über einen einzelnen generischen Kanal in Go?
Antwort:
Ja, das ist möglich. Anhand eines Beispiels in einem Playground-Link kann ein Kanal mit der folgenden Syntax erstellt werden:greet: make(chan pet); dann kann jeder Typ, der die Pet-Schnittstelle implementiert, nahtlos über diesen Kanal gesendet werden.
Um vollständige Typagnostizismus zu erreichen, kann ein Kanal vom Typ Chan-Schnittstelle{} verwendet werden. Beim Empfang eines Werts von einem solchen Kanal kann Reflexion eingesetzt werden, um seinen Typ zu bestimmen.
Beispiel:
Ein vereinfachtes Beispiel (wenn auch möglicherweise nicht idiomatisch), das dieses Konzept demonstriert :
<code class="go">ch := make(chan interface{}) go func() { select { case p := <-ch: fmt.Printf("Received a %q", reflect.TypeOf(p).Name()) } }() ch <- "this is it"</code>
Verbessertes Beispiel:
Ein alternativer Ansatz, der von BurntSushi5 vorgeschlagen wird, verwendet einen Typschalter:
<code class="go">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) }</code>
Das obige ist der detaillierte Inhalt vonIst der Kanaltyp von Go unabhängig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!